Dear all,
While working on a script to migrate some relationship classes, we've come up with some strange behaviour in both ArcMAP 10.6.1 (python27) and ArcGIS Pro. The script seems to work okay for a few relationships, but after migrating a couple the script sometimes crashes or just stops at the end of an edit session.
Even more strange (for us) is that the same code does find matches in ArcMap, but doesn't always find the same matches in an ArcGIS Pro environment, which led us towards thinking that the cursors aren't completed right, so we put in a del cursor. This worked, well actually now it finds more matches in ArcGIS Pro, but we get the same behaviour with sometimes just stopping at the end of an edit session.
By the way: we are working with versioned SDE (Oracle).
Perhaps some of you got any ideas, based on a code snippet?
<SPAN class="comment token"># Import arcpy module</SPAN>
<SPAN class="keyword token">import</SPAN> arcpy
<SPAN class="comment token">##import arceditor</SPAN>
<SPAN class="keyword token">from</SPAN> datetime <SPAN class="keyword token">import</SPAN> datetime <SPAN class="keyword token">as</SPAN> dt
<SPAN class="keyword token">import</SPAN> os
<SPAN class="keyword token">import</SPAN> time
start <SPAN class="operator token">=</SPAN> dt<SPAN class="punctuation token">.</SPAN>now<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Migratie globalID is gestart op: {}"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>dt<SPAN class="punctuation token">.</SPAN>now<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
database <SPAN class="operator token">=</SPAN> r<SPAN class="string token">"C:\Users\pschuurman\Documents\ArcGIS\Projects\DAMO\Damo_W@dmoTST6 (2).sde"</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>env<SPAN class="punctuation token">.</SPAN>workspace <SPAN class="operator token">=</SPAN> database
arcpy<SPAN class="punctuation token">.</SPAN>env<SPAN class="punctuation token">.</SPAN>overwriteOutput <SPAN class="operator token">=</SPAN> <SPAN class="token boolean">True</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Gebruikte database connectie: {}"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>database<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
fcs <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN>
del_lst <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN>
rcsnm_nw <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="comment token">#relationship many to many</SPAN>
rcsnm <SPAN class="operator token">=</SPAN> set<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
rcs1n <SPAN class="operator token">=</SPAN> set<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
rcFail <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN>
glbCount <SPAN class="operator token">=</SPAN> <SPAN class="number token">0</SPAN>
<SPAN class="comment token">#print("Maak een lijst met alle FeatureClasses en Tables in de database.")</SPAN>
<SPAN class="comment token"># Vul de lijsten met featureClassens en tables.</SPAN>
<SPAN class="keyword token">for</SPAN> item <SPAN class="keyword token">in</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>ListFeatureClasses<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"*"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> fcs<SPAN class="punctuation token">.</SPAN>append<SPAN class="punctuation token">(</SPAN>item<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">for</SPAN> item <SPAN class="keyword token">in</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>ListTables<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"*"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> fcs<SPAN class="punctuation token">.</SPAN>append<SPAN class="punctuation token">(</SPAN>item<SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token">#print(fcs)</SPAN>
<SPAN class="comment token"># Een dictionary om de input van CreateRelationshipClass de juiste waarde mee te geven.</SPAN>
<SPAN class="comment token"># Welke benaming gebruikt de database; OneToOne of esriRelCardinalityOneToOne?</SPAN>
mapping_cardinality <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">{</SPAN><SPAN class="string token">'OneToOne'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'ONE_TO_ONE'</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">'OneToMany'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'ONE_TO_MANY'</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">'ManyToMany'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'MANY_TO_MANY'</SPAN><SPAN class="punctuation token">}</SPAN>
rename_nopm_rc <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">{</SPAN><SPAN class="string token">'BergingsgebiedNormGP'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'Bergingsgebied_NormGP'</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">'HydroObjectNormGP'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'HydroObject_NormGP'</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">'MeetnetMeetlocatie'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'Meetnet_Meetlocatie'</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">'RefstelselRefpunt'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'Refstelsel_Refpunt'</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">'WaterkeringNormGP'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'Waterkering_NormGP'</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">'WaterkeringReferentiestelsel'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'Waterkering_Refstelsel'</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">'WaterkeringWKStelselAgg'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'Waterkering_WKStelselAgg'</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="punctuation token">}</SPAN>
rename_1opn_rc<SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">{</SPAN><SPAN class="string token">'DuikerSifonHelvel_Bedieningsplicht'</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="string token">'DuikerSifonHevel_Bedieningsplicht'</SPAN><SPAN class="punctuation token">}</SPAN>
rename_dfk_rc <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">{</SPAN><SPAN class="string token">'NORMGEPARAMPROFIEL_OBJECTID'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'normGeparamProfielID'</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">'DAMOTABEL_OBJECTID'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'DAMOTabelID'</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">'NORMGEPARAMPROFIEL_OBJECTID'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'normGeparamProfielID'</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">'MEETNET_OBJECTID'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'MeetnetID'</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">'REFERENTIEPUNT_OBJECTID'</SPAN> <SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'referentiepuntID'</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">'NORMGEPARAMPROFIEL_OBJECTID'</SPAN> <SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'normGeparamProfielID'</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">'REFERENTIESTELSEL_OBJECTID'</SPAN> <SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'referentiestelselID'</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">'WATERKERINGSTELSELAGG_OBJECTID'</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'waterkeringStelselAggregatieID'</SPAN> <SPAN class="punctuation token">}</SPAN>
<SPAN class="comment token"># Haal de namen van de relationshipClasses uit de lijst met featureClassens en tables.</SPAN>
<SPAN class="keyword token">for</SPAN> fc <SPAN class="keyword token">in</SPAN> fcs<SPAN class="punctuation token">:</SPAN>
desc <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>Describe<SPAN class="punctuation token">(</SPAN>fc<SPAN class="punctuation token">)</SPAN>
rcs <SPAN class="operator token">=</SPAN> desc<SPAN class="punctuation token">.</SPAN>relationshipClassNames
<SPAN class="comment token"># Maak een onderscheid tussen N op M en 1 op N/1 relaties</SPAN>
<SPAN class="keyword token">for</SPAN> rc <SPAN class="keyword token">in</SPAN> rcs<SPAN class="punctuation token">:</SPAN>
relcDesc <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>Describe<SPAN class="punctuation token">(</SPAN>rc<SPAN class="punctuation token">)</SPAN>
cardinality <SPAN class="operator token">=</SPAN> relcDesc<SPAN class="punctuation token">.</SPAN>cardinality
<SPAN class="comment token"># Maak lijst met de N op M relationshipClasses</SPAN>
<SPAN class="keyword token">if</SPAN> cardinality <SPAN class="operator token">==</SPAN> <SPAN class="string token">"ManyToMany"</SPAN><SPAN class="punctuation token">:</SPAN>
rcsnm<SPAN class="punctuation token">.</SPAN>add<SPAN class="punctuation token">(</SPAN>rc<SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># Maak lijst met de 1 op N/1 relationshipClasses</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="comment token">## print "Maak een lijst met relationshipclasses aan die cardinaliteit 1 op 1/N hebben."</SPAN>
destinationclasskeys <SPAN class="operator token">=</SPAN> relcDesc<SPAN class="punctuation token">.</SPAN>destinationclasskeys
rcs1n<SPAN class="punctuation token">.</SPAN>add<SPAN class="punctuation token">(</SPAN>rc<SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># Verwerkt de afzonderlijke N op M relationshipclasses in een aantal stappen die</SPAN>
<SPAN class="comment token"># bij de stap zelf verder beschreven staat.</SPAN>
<SPAN class="comment token">#print("Many to Many relationship list")</SPAN>
<SPAN class="comment token">#print(rcsnm)</SPAN>
<SPAN class="comment token">#print(rcs1n)</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Start verwerking 1-n relationship classes"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN>dt<SPAN class="punctuation token">.</SPAN>now<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">for</SPAN> rc1n <SPAN class="keyword token">in</SPAN> rcs1n<SPAN class="punctuation token">:</SPAN>
start_rc1n <SPAN class="operator token">=</SPAN> dt<SPAN class="punctuation token">.</SPAN>now<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
glbCount <SPAN class="operator token">+=</SPAN> <SPAN class="number token">1</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Verwerken relationship class {}"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>glbCount<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token">#Lees de kenmerken van een RelationshipClass uit.</SPAN>
relcDesc <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>Describe<SPAN class="punctuation token">(</SPAN>rc1n<SPAN class="punctuation token">)</SPAN>
cardinality <SPAN class="operator token">=</SPAN> relcDesc<SPAN class="punctuation token">.</SPAN>cardinality
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Verwerk de {} relationshipclass: {}"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>cardinality<SPAN class="punctuation token">,</SPAN>rc1n<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Uitlezen relationshipclass."</SPAN><SPAN class="punctuation token">)</SPAN>
cardinality_in <SPAN class="operator token">=</SPAN> mapping_cardinality<SPAN class="punctuation token">[</SPAN>cardinality<SPAN class="punctuation token">]</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN>cardinality_in<SPAN class="punctuation token">)</SPAN>
otable <SPAN class="operator token">=</SPAN> relcDesc<SPAN class="punctuation token">.</SPAN>originclassnames<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN>
dtable <SPAN class="operator token">=</SPAN> relcDesc<SPAN class="punctuation token">.</SPAN>destinationclassnames<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN>
fplabel <SPAN class="operator token">=</SPAN> relcDesc<SPAN class="punctuation token">.</SPAN>forwardpathlabel
bplabel <SPAN class="operator token">=</SPAN> relcDesc<SPAN class="punctuation token">.</SPAN>backwardpathlabel
originclasskeys <SPAN class="operator token">=</SPAN> relcDesc<SPAN class="punctuation token">.</SPAN>originclasskeys
ofk <SPAN class="operator token">=</SPAN> list<SPAN class="punctuation token">(</SPAN>zip<SPAN class="punctuation token">(</SPAN><SPAN class="operator token">*</SPAN>originclasskeys<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN>
opk <SPAN class="operator token">=</SPAN> list<SPAN class="punctuation token">(</SPAN>zip<SPAN class="punctuation token">(</SPAN><SPAN class="operator token">*</SPAN>originclasskeys<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="keyword token">if</SPAN> opk <SPAN class="operator token">==</SPAN> <SPAN class="string token">"GlobalID"</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Primary Key is GlobalID. Relationship Class wordt overgeslagen"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">continue</SPAN>
<SPAN class="keyword token">if</SPAN> rc1n<SPAN class="punctuation token">.</SPAN>startswith<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"DAMO_W.WS_"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Dit is een Waterschapseigen relatie. Relationship Class wordt overgeslagen"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">continue</SPAN>
opk_nw <SPAN class="operator token">=</SPAN> <SPAN class="string token">"GlobalID"</SPAN>
<SPAN class="comment token"># Maak samengestelde variabelen aan voor de tools die de RelationshipClass omzetten.</SPAN>
ofk_tmp <SPAN class="operator token">=</SPAN> <SPAN class="string token">"WS_Dummy"</SPAN>
<SPAN class="comment token">## # Reconnect routine uit de create_damo.py in verband met CalculateField met Archiving aan.</SPAN>
<SPAN class="comment token">## arcpy.env.workspace = ""</SPAN>
<SPAN class="comment token">## arcpy.ClearWorkspaceCache_management()</SPAN>
<SPAN class="comment token">## arcpy.Compress_management(sde_connection)</SPAN>
<SPAN class="comment token">## arcpy.env.workspace = database</SPAN>
<SPAN class="comment token">## print "Reconnect is uitgevoerd."</SPAN>
<SPAN class="comment token">## print("Verwerken relationshipclass")</SPAN>
<SPAN class="comment token"># Process: Delete, alleen wanneer er nog geen lock staat op de relatie,</SPAN>
<SPAN class="comment token"># Wanneer er wel een lock is toevoegen aan lijst met nog niet behandelde relationships.</SPAN>
<SPAN class="keyword token">if</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>TestSchemaLock<SPAN class="punctuation token">(</SPAN>rc1n<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>Delete_management<SPAN class="punctuation token">(</SPAN>rc1n<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"RelationshipClass"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Unable to acquire the necessary schema lock to delete Relationship Class"</SPAN><SPAN class="punctuation token">)</SPAN>
rcFail<SPAN class="punctuation token">.</SPAN>append<SPAN class="punctuation token">(</SPAN>rc1n<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">continue</SPAN>
<SPAN class="comment token"># Als de naam voorkomt in dictionary bovenaan, verander de naam </SPAN>
<SPAN class="keyword token">if</SPAN> rc1n<SPAN class="punctuation token">.</SPAN>split<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"."</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="keyword token">in</SPAN> rename_1opn_rc<SPAN class="punctuation token">:</SPAN>
rc1n <SPAN class="operator token">=</SPAN> rename_1opn_rc<SPAN class="punctuation token">[</SPAN>rc1n<SPAN class="punctuation token">.</SPAN>split<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"."</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="comment token">#Als er geen records in het foreign key veld gevuld zijn, dan alleen veld verwijderen en nieuw veld aanmaken</SPAN>
whereClause <SPAN class="operator token">=</SPAN> <SPAN class="string token">"{0} IS NOT NULL"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>ofk<SPAN class="punctuation token">)</SPAN>
cursor <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>da<SPAN class="punctuation token">.</SPAN>SearchCursor<SPAN class="punctuation token">(</SPAN>dtable<SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="string token">'OBJECTID'</SPAN><SPAN class="punctuation token">,</SPAN> ofk<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> whereClause<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"SearchCursor tabel {} veld: {}"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>dtable<SPAN class="punctuation token">,</SPAN>ofk<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">if</SPAN> len<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN>row <SPAN class="keyword token">for</SPAN> row <SPAN class="keyword token">in</SPAN> cursor<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">==</SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">del</SPAN> cursor
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Tabel is leeg"</SPAN><SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>DeleteField_management<SPAN class="punctuation token">(</SPAN>dtable<SPAN class="punctuation token">,</SPAN> ofk<SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>AddField_management<SPAN class="punctuation token">(</SPAN>dtable<SPAN class="punctuation token">,</SPAN> ofk<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"GUID"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">""</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">""</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">""</SPAN><SPAN class="punctuation token">,</SPAN> ofk<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"NULLABLE"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"NON_REQUIRED"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">""</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token">#arcpy.CreateRelationshipClass_management(otable, dtable, rc1n, "SIMPLE", fplabel, bplabel, "NONE", cardinality_in, "NONE", opk_nw, ofk)</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">del</SPAN> cursor
<SPAN class="comment token"># Process: Alter Field</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Veldnaam: {} in tabel: {} krijgt nieuwe veldnaam: {}"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>ofk<SPAN class="punctuation token">,</SPAN> dtable<SPAN class="punctuation token">,</SPAN>ofk_tmp<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
fieldnames <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN>field<SPAN class="punctuation token">.</SPAN>name <SPAN class="keyword token">for</SPAN> field <SPAN class="keyword token">in</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>ListFields<SPAN class="punctuation token">(</SPAN>dtable<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="keyword token">if</SPAN> ofk_tmp <SPAN class="keyword token">in</SPAN> fieldnames<SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Veld {} bestaat al en wordt verwijderd"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>ofk_tmp<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>DeleteField_management<SPAN class="punctuation token">(</SPAN>dtable<SPAN class="punctuation token">,</SPAN> ofk_tmp<SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>AlterField_management<SPAN class="punctuation token">(</SPAN>dtable<SPAN class="punctuation token">,</SPAN> ofk<SPAN class="punctuation token">,</SPAN> ofk_tmp<SPAN class="punctuation token">,</SPAN> ofk_tmp<SPAN class="punctuation token">)</SPAN>
time<SPAN class="punctuation token">.</SPAN>sleep<SPAN class="punctuation token">(</SPAN><SPAN class="number token">3</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># Process: Add Field</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>AddField_management<SPAN class="punctuation token">(</SPAN>dtable<SPAN class="punctuation token">,</SPAN> ofk<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"GUID"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">""</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">""</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">""</SPAN><SPAN class="punctuation token">,</SPAN> ofk<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"NULLABLE"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"NON_REQUIRED"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">""</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># Aanmaken Dictionary met daarin ObjectID en GlobalID uit de brontabel om daarmee in de</SPAN>
<SPAN class="comment token"># doeltabel de BronTabelID een te kunnen vullen met de GlobalID voor de nieuwe relationshipClass</SPAN>
relclassDict <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">{</SPAN>r<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="punctuation token">(</SPAN>r<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">for</SPAN> r <SPAN class="keyword token">in</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>da<SPAN class="punctuation token">.</SPAN>SearchCursor<SPAN class="punctuation token">(</SPAN>otable<SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">[</SPAN>opk<SPAN class="punctuation token">,</SPAN> opk_nw<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">}</SPAN>
<SPAN class="comment token">#print relclassDict</SPAN>
<SPAN class="comment token"># Als de naam begint met DAMO wordt er geen editsession gestart</SPAN>
<SPAN class="comment token">#print("resultaat split is : {}".format(dtable.split(".")[-1][:4]))</SPAN>
<SPAN class="keyword token">if</SPAN> dtable<SPAN class="punctuation token">.</SPAN>split<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"."</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="number token">4</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">==</SPAN> <SPAN class="string token">"DAMO"</SPAN> <SPAN class="punctuation token">:</SPAN>
versioning <SPAN class="operator token">=</SPAN> <SPAN class="token boolean">False</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
versioning <SPAN class="operator token">=</SPAN> <SPAN class="token boolean">True</SPAN>
<SPAN class="keyword token">if</SPAN> versioning<SPAN class="punctuation token">:</SPAN>
edit <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>da<SPAN class="punctuation token">.</SPAN>Editor<SPAN class="punctuation token">(</SPAN>database<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Start edit session"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># Edit session is started without an undo/redo stack for versioned data</SPAN>
<SPAN class="comment token"># (for second argument, use False for unversioned data)</SPAN>
edit<SPAN class="punctuation token">.</SPAN>startEditing<SPAN class="punctuation token">(</SPAN><SPAN class="token boolean">True</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="token boolean">True</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># Start an edit operation</SPAN>
edit<SPAN class="punctuation token">.</SPAN>startOperation<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Start verwerking DAMO Tabel"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># Vullen nieuw veld BrontabelID met de juiste GlobalID uit de doeltabel.</SPAN>
whereClause <SPAN class="operator token">=</SPAN> <SPAN class="string token">"{0} IS NOT NULL"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>ofk_tmp<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">with</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>da<SPAN class="punctuation token">.</SPAN>UpdateCursor<SPAN class="punctuation token">(</SPAN>dtable<SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">[</SPAN>ofk_tmp<SPAN class="punctuation token">,</SPAN> ofk<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> whereClause<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">as</SPAN> cursor<SPAN class="punctuation token">:</SPAN>
count <SPAN class="operator token">=</SPAN> <SPAN class="number token">0</SPAN>
<SPAN class="keyword token">for</SPAN> row <SPAN class="keyword token">in</SPAN> cursor<SPAN class="punctuation token">:</SPAN>
joinfld <SPAN class="operator token">=</SPAN> row<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="comment token">#print (joinfld)</SPAN>
<SPAN class="keyword token">if</SPAN> joinfld <SPAN class="keyword token">in</SPAN> relclassDict<SPAN class="punctuation token">:</SPAN>
row<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">=</SPAN> relclassDict<SPAN class="punctuation token">[</SPAN>joinfld<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN>
cursor<SPAN class="punctuation token">.</SPAN>updateRow<SPAN class="punctuation token">(</SPAN>row<SPAN class="punctuation token">)</SPAN>
count <SPAN class="operator token">+=</SPAN> <SPAN class="number token">1</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Aantal matches: {}"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>count<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">if</SPAN> versioning<SPAN class="punctuation token">:</SPAN>
<SPAN class="comment token"># Stop the edit operation.</SPAN>
edit<SPAN class="punctuation token">.</SPAN>stopOperation<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># Stop the edit session and save the changes</SPAN>
edit<SPAN class="punctuation token">.</SPAN>stopEditing<SPAN class="punctuation token">(</SPAN><SPAN class="token boolean">True</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Stop editsession"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Stop verwerking DAMO Tabel"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># Process: Create Relationship Class (maak een nieuwe relationshipclass)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>CreateRelationshipClass_management<SPAN class="punctuation token">(</SPAN>otable<SPAN class="punctuation token">,</SPAN> dtable<SPAN class="punctuation token">,</SPAN> rc1n<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"SIMPLE"</SPAN><SPAN class="punctuation token">,</SPAN> fplabel<SPAN class="punctuation token">,</SPAN> bplabel<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"NONE"</SPAN><SPAN class="punctuation token">,</SPAN> cardinality_in<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"NONE"</SPAN><SPAN class="punctuation token">,</SPAN> opk_nw<SPAN class="punctuation token">,</SPAN> ofk<SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># Process: Delete field.</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>DeleteField_management<SPAN class="punctuation token">(</SPAN>dtable<SPAN class="punctuation token">,</SPAN> ofk_tmp<SPAN class="punctuation token">)</SPAN>
einde_rc1n <SPAN class="operator token">=</SPAN> dt<SPAN class="punctuation token">.</SPAN>now<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="string token">'Doorlooptijd verwerken relatie: {}.'</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>einde_rc1n <SPAN class="operator token">-</SPAN> start_rc1n<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Verwijderen tussentijdse tabellen nadat het script goed is doorlopen."</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">for</SPAN> item <SPAN class="keyword token">in</SPAN> del_lst<SPAN class="punctuation token">:</SPAN>
<SPAN class="comment token"># Proces: Delete featureclass</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>Delete_management<SPAN class="punctuation token">(</SPAN>item<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Nog niet aangepaste Relationshipclasses"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN>rcFail<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"De N op M relaties: "</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN>rcsnm<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"zijn aangepast naar de volgende naamgeving."</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN>rcsnm<SPAN class="punctuation token">)</SPAN>
finish <SPAN class="operator token">=</SPAN> dt<SPAN class="punctuation token">.</SPAN>now<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN>finish<SPAN class="punctuation token">)</SPAN>
dlt <SPAN class="operator token">=</SPAN> finish<SPAN class="operator token">-</SPAN>start
<SPAN class="keyword token">print</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="string token">"De doorlooptijd was: {}"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>dlt<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>