POST
|
I would like to generate a .sd file for a feature service through python. A little information: We are using ArcGIS Server 10.2.2 We are using an oracle database to house all of the data. GeoDatabases are not an option. It must be oracle. All mxds connect to layers in the oracle database through .sde files We are publishing map services for viewing in a browser, and feature services for editing data in a browser. We do not have direct access to the ArcGIS Servers. We have to give all of the required ArcGIS content to an employee who is responsible for doing the migrations. We have three environments: dev, test, prod. Every time we update an mxd, we need to do the following: set datasources on every mxd to point to the corresponding environments. create .sd files to give to the employee responsible for the migrations This process can be tedious if done by hand, so I have scripted most of it out. I can update the datasources for all of the mxds and create .sd files for map services just fine, but my problem is with the feature services. I cannot get the .sd file that I generate for feature services to run on the ArcGIS server. I have followed the instructions in example 7 of this page: ArcGIS Help (10.2, 10.2.1, and 10.2.2) , but every time I upload the .sd file to manager, i get the following error: Could not find resource or operation 'FeatureServer' on the system. Here is my python code to create the .sddraft file. def make_sd_draft(mxdPath, serviceName): mxd = arcpy.mapping.MapDocument(mxdPath) tempDir = mxdPath.replace(ntpath.basename(mxdPath), "") """Ceate a draft SD and modify the properties to overwrite an existing FS.""" arcpy.env.overwriteOutput = True # All paths are built by joining names to the tempPath SDdraft = os.path.join(tempDir, serviceName + ".sddraft") newSDdraft = os.path.join(tempDir, serviceName + "_updated.sddraft") arcpy.mapping.CreateMapSDDraft(mxd, SDdraft, serviceName, "MY_HOSTED_SERVICES") #open the SDDraft file and replace any " entities with something else that we can restore later replaceInFile(SDdraft, '"', 'zzzzzQuotezzzzz') # Read the contents of the original SDDraft into an xml parser doc = ET.parse(SDdraft) root_elem = doc.getroot() if root_elem.tag != "SVCManifest": raise ValueError("Root tag is incorrect. Is {} a .sddraft file?".format(SDDraft)) # Change service type from map service to feature service for config in doc.findall("./Configurations/SVCConfiguration/TypeName"): if config.text == "MapServer": config.text = "FeatureServer" #Turn off caching for prop in doc.findall("./Configurations/SVCConfiguration/Definition/" + "ConfigurationProperties/PropertyArray/" + "PropertySetProperty"): if prop.find("Key").text == 'isCached': prop.find("Value").text = "false" for prop in doc.findall("./Configurations/SVCConfiguration/Definition/Extensions/SVCExtension"): if prop.find("TypeName").text == 'KmlServer': prop.find("Enabled").text = "false" # Turn on feature access capabilities for prop in doc.findall("./Configurations/SVCConfiguration/Definition/Info/PropertyArray/PropertySetProperty"): if prop.find("Key").text == 'WebCapabilities': prop.find("Value").text = "Query,Create,Update,Delete,Uploads,Editing" # Add the namespaces which get stripped, back into the .SD root_elem.attrib["xmlns:typens"] = 'http://www.esri.com/schemas/ArcGIS/10.1' root_elem.attrib["xmlns:xs"] = 'http://www.w3.org/2001/XMLSchema' # Write the new draft to disk with open(newSDdraft, 'w') as f: doc.write(f) f.close() return newSDdraft
... View more
01-23-2015
06:16 AM
|
0
|
1
|
4494
|
Online Status |
Offline
|
Date Last Visited |
11-11-2020
02:24 AM
|