Um eine sehr große Anzahl von Map-Konsumenten zu unterstützen, die niemals etwas bearbeiten oder Daten erstellen, verlasse ich mich darauf, dass AGOL Map (Hosted Feature Services) hostet, diese als "Items" an Portal zurückbindet und meine ArcGIS Server Farm Service-Instanzen niedrig hält, indem nur das gestartet wird, was zur Unterstützung der Editoren benötigt wird. Durch Sicherheitskontrollen ist der Map-Service, der automatisch mit einem Feature-Service kommt, nicht auffindbar. Ich möchte nicht, dass Leute die Map-Services aufrufen und mehr Service-Instanzen starten. Dies ist im Grunde eine "Collaboration" für Personen, die Collaboration auf ihrem Portal nicht aktivieren können. <\/P>
<\/P>
https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/analytics\/updating-your-hosted-feature-services-with-arcgis-pro-and-the-arcgis-api-for-python<\/>\/<\/A> war in den letzten Jahren ziemlich praktisch. Über eine geplante Aufgabe aktualisiert es (nächtlich) mehrere hundert Feature-Services, indem es Daten aus SDE in ein Pro-Projekt zieht und das auf AGOL Überschreibt. Leider erlaubt es nicht, die Einstellung "Allow Export to other formats" auf AGOL beizubehalten. <\/P><\/P>Hier kommt https:\/\/pro.arcgis.com\/en\/pro-app\/arcpy\/sharing\/introduction-to-arcpy-sharing.htm<\/>\/<\/A> ins Spiel, bei dem ich endlich die Ärmel hochgekrempelt habe und all meine Python-Dinger umgestellt habe, um https:\/\/pro.arcgis.com\/en\/pro-app\/arcpy\/sharing\/featuresharingdraft-class.htm<\/>\/<\/A>, https:\/\/pro.arcgis.com\/en\/pro-app\/tool-reference\/server\/stage-service.htm<\/>\/<\/A> und https:\/\/pro.arcgis.com\/en\/pro-app\/tool-reference\/server\/upload-service-definition.htm<\/>\/<\/A> zu verwenden. Zufälligerweise gibt es viel mehr Optionen zur Steuerung der Service-Parameter. <\/P>Haftungsausschluss: Ich weiß nichts über Python, daher gibt es sicherlich allerlei Ineffizienzen hier drin, aber es funktioniert. <\/>P><\/>P>import<\/> arcpyimport<\/> sys,<\/> string,<\/> os,<\/> calendar,<\/> datetime,<\/> traceback,<\/>smtplibfrom<\/> arcpy import<\/> envfrom<\/> subprocess import<\/> call# Mail Server Settings<\/> service =<\/> "GRSM_SASQUATCH"<\/> sd_filename =<\/> service +<\/> ".sd"<\/> try<\/>:<\/> d =<\/> datetime.<\/>datetime.<\/>now(<\/>)<\/> log =<\/> open("C:\PYTHON_LOGS\LOG."<\/>+<\/>service+<\/>".txt"<\/>,"a"<\/>)<\/> log.write("----------------------------"<\/>+<\/>"\\n"<\/>) log.write("----------------------------"<\/>+<\/>"\\n"<\/>) log.write("Log: "<\/>+<\/> str((d)<\/>+<\/>"\\n") log.write("")# Start process... starttime = datetime.datetime.now() log.write("Begin process:\n") log.write(" Process started at " + str(starttime) + "\n") log.write("\n")# Mail Server Settings SERVER = "1.2.34" PORT = "25" FROM = "sasquatch@big.foot.com" MAILDOMAIN = '@big.foot.com'# Data Steward getting the email. Needs to be their email address...without @big.foot.comat the end userList=["yeti"]# get a list of usernames from the list of named tuples returned from ListUsers userNames = [u for u in userList]# take the userNames list and make email addresses by appending the appropriate suffix. emailList = [name + MAILDOMAIN for name in userNames] TO = emailList# Grab date for the email DATE = d# Sign in to portal arcpy.SignInToPortal('https://www.arcgis.com', 'userid', 'password')# Set output file names outdir = r"C:\PRODUCTION\GRSM_SASQUATCH" sddraft_filename = service + ".sddraft" sddraft_output_filename = os.path.join(outdir, sddraft_filename)#Delete any left over SD files from failed previous run try: os.remove(sd_filename) print("Successfully deleted ", sd_filename) except: print("Error beim Löschen der Datei ", sd_filename, ", vielleicht existiert sie nicht")versuchen: os.remove(sddraft_output_filename)print("Erfolgreich gelöscht ", sddraft_output_filename)außer:print("Fehler beim Löschen der Datei ", sddraft_output_filename, ", vielleicht existiert sie nicht") # Referenzkarte zum Veröffentlichen aprx = arcpy.mp.ArcGISProject(r"C:\PRODUCTION\GRSM_SASQUATCH\GRSM_SASQUATCH.aprx") m = aprx.listMaps("GRSM_SASQUATCH_LOCATIONS")[0]# FeatureSharingDraft erstellen und Diensteigenschaften festlegen# https://pro.arcgis.com/en/pro-app/arcpy/sharing/featuresharingdraft-class.htm sharing_draft = m.getWebLayerSharingDraft:<\/SPAN>\n \n # Hole das traceback-Objekt<\/SPAN>\n tb =<\/SPAN> sys.<\/SPAN>exc_info(<\/SPAN>)<\/SPAN>[<\/SPAN>2<\/SPAN>]<\/SPAN>\n tbinfo =<\/SPAN> traceback.<\/SPAN>format_tb(<\/SPAN>tb)<\/SPAN>[<\/SPAN>0<\/SPAN>]<\/SPAN>\n # Füge Informationen zusammen bezüglich <\/SPAN>\n # des Fehlers in eine Nachrichtenkette<\/SPAN>\n pymsg =<\/SPAN> "PYTHON FEHLER:\nTraceback-Info:\n"<\/SPAN> +<\/SPAN> tbinfo +<\/SPAN> "\nFehlerinfo:\n"<\/SPAN> +<\/SPAN> str(<\/SPAN>sys.<\/SPAN>exc_info(<\/Span>)<\/span>[1])\n msgs = "ArcPy FEHLER:\n" + arcpy.GetMessages(2) + "\n"\n# Rückgabe der Python-Fehlermeldungen zur Verwendung im <\/span>\n# Skript-Tool oder Python-Fenster<\/span>\n arcpy.AddError(pymsg)\n arcpy.AddError(msgs)\n# Ausgabe der Python-Fehlermeldungen zur Verwendung in <\/span>\n# Python / Python-Fenster<\/span>\n log.write("" + pymsg + "\n")\n log.write("" + msgs + "")\n log.close()\n # Definiere E-Mail-Nachricht, falls etwas schiefgelaufen ist<\/span>\n SUBJECT = "Benachrichtigung über nicht erfolgreichen AGOL-Update von "+service \n MSG = "Nicht aktualisiert: {} - ID: {} um "+ str(DATERANGETOKEN) )+
Hier kommt
Haftungsausschluss: Ich weiß nichts über Python, daher gibt es sicherlich allerlei Ineffizienzen hier drin, aber es funktioniert. <\/>P>
<\/>P>
import<\/> arcpyimport<\/> sys,<\/> string,<\/> os,<\/> calendar,<\/> datetime,<\/> traceback,<\/>smtplibfrom<\/> arcpy import<\/> envfrom<\/> subprocess import<\/> call# Mail Server Settings<\/> service =<\/> "GRSM_SASQUATCH"<\/> sd_filename =<\/> service +<\/> ".sd"<\/> try<\/>:<\/> d =<\/> datetime.<\/>datetime.<\/>now(<\/>)<\/> log =<\/> open("C:\PYTHON_LOGS\LOG."<\/>+<\/>service+<\/>".txt"<\/>,"a"<\/>)<\/> log.write("----------------------------"<\/>+<\/>"\\n"<\/>) log.write("----------------------------"<\/>+<\/>"\\n"<\/>) log.write("Log: "<\/>+<\/> str((d)<\/>+<\/>"\\n") log.write("")# Start process... starttime = datetime.datetime.now() log.write("Begin process:\n") log.write(" Process started at " + str(starttime) + "\n") log.write("\n")# Mail Server Settings SERVER = "1.2.34" PORT = "25" FROM = "sasquatch@big.foot.com" MAILDOMAIN = '@big.foot.com'# Data Steward getting the email. Needs to be their email address...without @big.foot.comat the end userList=["yeti"]# get a list of usernames from the list of named tuples returned from ListUsers userNames = [u for u in userList]# take the userNames list and make email addresses by appending the appropriate suffix. emailList = [name + MAILDOMAIN for name in userNames] TO = emailList# Grab date for the email DATE = d# Sign in to portal arcpy.SignInToPortal('https://www.arcgis.com', 'userid', 'password')# Set output file names outdir = r"C:\PRODUCTION\GRSM_SASQUATCH" sddraft_filename = service + ".sddraft" sddraft_output_filename = os.path.join(outdir, sddraft_filename)#Delete any left over SD files from failed previous run try: os.remove(sd_filename) print("Successfully deleted ", sd_filename) except: print("Error beim Löschen der Datei ", sd_filename, ", vielleicht existiert sie nicht")versuchen: os.remove(sddraft_output_filename)print("Erfolgreich gelöscht ", sddraft_output_filename)außer:print("Fehler beim Löschen der Datei ", sddraft_output_filename, ", vielleicht existiert sie nicht") # Referenzkarte zum Veröffentlichen aprx = arcpy.mp.ArcGISProject(r"C:\PRODUCTION\GRSM_SASQUATCH\GRSM_SASQUATCH.aprx") m = aprx.listMaps("GRSM_SASQUATCH_LOCATIONS")[0]# FeatureSharingDraft erstellen und Diensteigenschaften festlegen# https://pro.arcgis.com/en/pro-app/arcpy/sharing/featuresharingdraft-class.htm sharing_draft = m.getWebLayerSharingDraft:<\/SPAN>\n \n # Hole das traceback-Objekt<\/SPAN>\n tb =<\/SPAN> sys.<\/SPAN>exc_info(<\/SPAN>)<\/SPAN>[<\/SPAN>2<\/SPAN>]<\/SPAN>\n tbinfo =<\/SPAN> traceback.<\/SPAN>format_tb(<\/SPAN>tb)<\/SPAN>[<\/SPAN>0<\/SPAN>]<\/SPAN>\n # Füge Informationen zusammen bezüglich <\/SPAN>\n # des Fehlers in eine Nachrichtenkette<\/SPAN>\n pymsg =<\/SPAN> "PYTHON FEHLER:\nTraceback-Info:\n"<\/SPAN> +<\/SPAN> tbinfo +<\/SPAN> "\nFehlerinfo:\n"<\/SPAN> +<\/SPAN> str(<\/SPAN>sys.<\/SPAN>exc_info(<\/Span>)<\/span>[1])\n msgs = "ArcPy FEHLER:\n" + arcpy.GetMessages(2) + "\n"\n# Rückgabe der Python-Fehlermeldungen zur Verwendung im <\/span>\n# Skript-Tool oder Python-Fenster<\/span>\n arcpy.AddError(pymsg)\n arcpy.AddError(msgs)\n# Ausgabe der Python-Fehlermeldungen zur Verwendung in <\/span>\n# Python / Python-Fenster<\/span>\n log.write("" + pymsg + "\n")\n log.write("" + msgs + "")\n log.close()\n # Definiere E-Mail-Nachricht, falls etwas schiefgelaufen ist<\/span>\n SUBJECT = "Benachrichtigung über nicht erfolgreichen AGOL-Update von "+service \n MSG = "Nicht aktualisiert: {} - ID: {} um "+ str(DATERANGETOKEN) )+
Off-topic: Pro "Arc Map" Equivalency Ideas You Should Vote On! is a good idea, thanks for putting it together. I have something similar on our intranet. There's no way to comment on the doc, thus the intrusion here. Maybe announce it with a blog post, and link back to the blog post from the doc.
Angemeldete Mitglieder können Beiträge verfassen, Updates folgen und mehr. Neu hier? Registrieren Sie ein kostenloses Konto.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.