Using Python 2.7.8, I'm trying to use the default field mappings for all fields except for 2 (PIC_ID and Object ID). The two tables are essentially identical, the tinkering with the globalid is something I have to do in order to preserve the globalid part of an attachment relationship when syncing an AGOL feature service to an on-premise SDE, and not something I'm looking to change. The below snippet works when I'm just altering one field out of the mapping:
target_layer <SPAN class="operator token">=</SPAN> <SPAN class="string token">"C:/blah blah blah.sde/blah.DBO.blah"</SPAN>
append_layer <SPAN class="operator token">=</SPAN> renamefgdb<SPAN class="operator token">+</SPAN><SPAN class="string token">'\yada_yada_yada'</SPAN>
fieldmappings <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>FieldMappings<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
fieldmappings<SPAN class="punctuation token">.</SPAN>addTable<SPAN class="punctuation token">(</SPAN>target_layer<SPAN class="punctuation token">)</SPAN>
fieldmappings<SPAN class="punctuation token">.</SPAN>addTable<SPAN class="punctuation token">(</SPAN>append_layer<SPAN class="punctuation token">)</SPAN>
field_to_map_index <SPAN class="operator token">=</SPAN> fieldmappings<SPAN class="punctuation token">.</SPAN>findFieldMapIndex<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"globalid"</SPAN><SPAN class="punctuation token">)</SPAN>
field_to_map <SPAN class="operator token">=</SPAN> fieldmappings<SPAN class="punctuation token">.</SPAN>getFieldMap<SPAN class="punctuation token">(</SPAN>field_to_map_index<SPAN class="punctuation token">)</SPAN>
field_to_map<SPAN class="punctuation token">.</SPAN>addInputField<SPAN class="punctuation token">(</SPAN>append_layer<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"PIC_ID"</SPAN><SPAN class="punctuation token">)</SPAN>
fieldmappings<SPAN class="punctuation token">.</SPAN>replaceFieldMap<SPAN class="punctuation token">(</SPAN>field_to_map_index<SPAN class="punctuation token">,</SPAN> field_to_map<SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>Append_management<SPAN class="punctuation token">(</SPAN>append_layer<SPAN class="punctuation token">,</SPAN> target_layer<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"NO_TEST"</SPAN><SPAN class="punctuation token">,</SPAN> fieldmappings<SPAN class="punctuation token">,</SPAN> <SPAN class="string 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>
However I have an operational requirement to maintain the objectid during append: that is, the objectID's coming from the append source need to be the same when they go to the target layer.
But when I do something like this, or many many many variations thereof, it fails.
target_layer <SPAN class="operator token">=</SPAN> <SPAN class="string token">"C:/blah blah blah.sde/blah.DBO.blah"</SPAN>
append_layer <SPAN class="operator token">=</SPAN> renamefgdb<SPAN class="operator token">+</SPAN><SPAN class="string token">'\yada_yada_yada'</SPAN>
fieldmappings <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>FieldMappings<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
fieldmappings<SPAN class="punctuation token">.</SPAN>addTable<SPAN class="punctuation token">(</SPAN>target_layer<SPAN class="punctuation token">)</SPAN>
fieldmappings<SPAN class="punctuation token">.</SPAN>addTable<SPAN class="punctuation token">(</SPAN>append_layer<SPAN class="punctuation token">)</SPAN>
field_to_map_index <SPAN class="operator token">=</SPAN> fieldmappings<SPAN class="punctuation token">.</SPAN>findFieldMapIndex<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"globalid"</SPAN><SPAN class="punctuation token">)</SPAN>
field_to_map_index <SPAN class="operator token">=</SPAN> fieldmappings<SPAN class="punctuation token">.</SPAN>findFieldMapIndex<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"objectid"</SPAN><SPAN class="punctuation token">)</SPAN>
field_to_map <SPAN class="operator token">=</SPAN> fieldmappings<SPAN class="punctuation token">.</SPAN>getFieldMap<SPAN class="punctuation token">(</SPAN>field_to_map_index<SPAN class="punctuation token">)</SPAN>
field_to_map<SPAN class="punctuation token">.</SPAN>addInputField<SPAN class="punctuation token">(</SPAN>append_layer<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"PIC_ID"</SPAN><SPAN class="punctuation token">)</SPAN>
field_to_map<SPAN class="punctuation token">.</SPAN>addInputField<SPAN class="punctuation token">(</SPAN>append_layer<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"OBJECTID"</SPAN><SPAN class="punctuation token">)</SPAN>
fieldmappings<SPAN class="punctuation token">.</SPAN>replaceFieldMap<SPAN class="punctuation token">(</SPAN>field_to_map_index<SPAN class="punctuation token">,</SPAN> field_to_map<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>
So is it possible to add ObjectID to a field mapping in python, and if so, how?