Pour prendre en charge un très grand nombre de consommateurs de cartes, qui ne modifient jamais rien ni ne créent de données, je m'appuie sur AGOL pour héberger la carte (Hosted Feature Services), les connecter ensuite à Portal en tant qu'"Items", et garder mes instances de service ArcGIS Server Farm basses, ne lançant que ce qui est nécessaire pour soutenir les éditeurs. Grâce aux contrôles de sécurité, le service de carte qui accompagne automatiquement un service d'entités est non découvrable. Je ne veux pas que les gens accèdent aux services de carte et génèrent plus d'instances de service. C'est en fait une "Collaboration" pour les personnes qui ne peuvent pas activer Collaboration sur leur Portal. <\/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> a été très utile ces dernières années, via une tâche planifiée, il met à jour (tous les soirs) plusieurs centaines de services d'entités en extrayant des données de SDE dans un projet Pro et en écrasant ce qui est sur AGOL. Malheureusement, il ne permet pas de conserver le paramètre "Allow Export to other formats" sur AGOL. <\/P><\/P>Voici https:\/\/pro.arcgis.com\/en\/pro-app\/arcpy\/sharing\/introduction-to-arcpy-sharing.htm<\/>\/<\/A>, sur lequel je me suis enfin penché et ai converti tous mes bidules python pour utiliser 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>, et https:\/\/pro.arcgis.com\/en\/pro-app\/tool-reference\/server\/upload-service-definition.htm<\/>\/<\/A>. Par coïncidence, il y a beaucoup plus d'options pour contrôler les paramètres du service. <\/P>Avertissement : Je ne connais rien au python, donc je suis sûr qu'il y a toutes sortes d'inefficacités ici, mais ça fonctionne. <\/>P><\/>P>import<\/> arcpyimport<\/> sys,<\/> string,<\/> os,<\/> calendar,<\/> datetime,<\/> traceback,<\/>smtplibfrom<\/> arcpy import<\/> envfrom<\/> subprocess import<\/> call# Paramètres du serveur mail<\/> 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("\n")# Démarrer le processus...<\/> starttime , sd_filename, ", peut-être qu'il n'existe pas")essayer: os.remove(sddraft_output_filename)imprimer("Supprimé avec succès ", sddraft_output_filename)sauf:imprimer("Erreur lors de la suppression du fichier ", sddraft_output_filename, ", peut-être qu'il n'existe pas") # Carte de référence à publier aprx = arcpy.mp.ArcGISProject(r"C:\PRODUCTION\GRSM_SASQUATCH\GRSM_SASQUATCH.aprx") m = aprx.listMaps("GRSM_SASQUATCH_LOCATIONS")[0]# Créer FeatureSharingDraft et définir les propriétés du service# https://pro.arcgis.com/en/pro-app/arcpy/sharing/featuresharingdraft-class.htm sharing_draft = m.getWebLayerSharingDraft:<\/SPAN>\n \n # Obtenir l'objet traceback<\/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 # Concaténer les informations concernant <\/SPAN>\n # l'erreur dans une chaîne de message<\/SPAN>\n pymsg =<\/SPAN> "ERREURS PYTHON:\nInformations de traceback:\n"<\/SPAN> +<\/SPAN> tbinfo +<\/SPAN> "\nInformations sur l'erreur:\n"<\/SPAN> +<\/SPAN> str(<\/SPAN>sys.<\/SPAN>exc_info(<\/SPAN>)<\/SPAN>[<\/SPAN>1<\/Span>]<\/span>)\n msgs =<\/span> "ERREURS ArcPy:\n"<\/span> +<\/span> arcpy.<\/span>GetMessages(<\/span>2<\/span>)<\/span> +<\/span> "\n"<\/span>\n# Retourner les messages d'erreur python pour utilisation dans <\/span>\n# outil script ou Fenêtre Python<\/span>\n arcpy.<\/span>AddError(<\/span>pymsg)<\/span>\n arcpy.<\/span>AddError(<\/span>msgs)<\/span>\n# Imprimer les messages d'erreur Python pour utilisation dans <\/span>\n# Python \/ Fenêtre Python<\/span>\n log.<\/span>write(<\/span>""<\/span> +<\/span> pymsg +<\/span> "\n"<\/span>)<\/span>\n log.<\/span>write(<\/span>""<\/span> +<\/span> msgs +<\/span> ""<\/span>)<\/span>\n log.<\/span>close(<\/span>)<\/span>\n # Définir le message email si quelque chose a mal tourné<\/span>\n SUBJECT =<\/span> "Notification de mise à jour AGOL non réussie de "<\/span>+<\/span>service \n MSG =<\/span> "Mise à jour échouée : {} - ID : {} à "<\/span>+<\/span> str(<\/span>DATE)<\/span>+<\/span> "; "<\/span> +<\/pan >pymsg < spanclass = " operatortoken " > + </ span > spanclass = " stringtoken " > "; " </ span > spanclass = " operatortoken " > + </ span > msgs \n print(MSG)\n print(emailList)\n \n # Envoyer un email notifiant le gestionnaire de l'archive réussie\n #MESSAGE = "\\ From: %s To: %s Subject: %s %s" % (FROM, ", ".join(TO), SUBJECT, MSG)\n MESSAGE = "Subject: %s\\n\\n%s" % (SUBJECT, MSG)\n try:\n try:\n print("Connexion au serveur...")\n server = smtplib.SMTP(SERVER,PORT)\n try:\n print("Connexion...")\n try:\n print("Envoi du mail...")\n server.sendmail(FROM, TO, MESSAGE)\n except Exception as e:\n print("Erreur d'envoi du mail\\n" + e.message)\n except Exception as e:\n print("Erreur d'authentification serveur : vérifier les identifiants \n" + e.message)\n except Exception as e:\n print("Erreur de connexion au serveur : vérifier l'URL du serveur et le port de communication (25 par défaut) \n" + e.message)\n \n print("Quitter.")\n server.quit()\n \n except Exception as e:\n print(e.message) \n</ SPan >< SPan >< EMOJI_23 ></ SPan >< SPan >< EMOJI_24 ></ SPan >< SPan >< EMOJI_25 ></ SPan >< SPan >< EMOJI_26 ></ SPan >< SPan >< EMOJI_27 ></ SPan >< SPan >< EMOJI_28 ></ SPan >< SPan >< EMOJI_29 ></ SPan >< SPan >< EMOJI_30 ></ SPan >< SPan >< EMOJI_31 ></ SPan >< SPan >< EMOJI_32 ></ SPan >< SPan >< EMOJI_33 ></ SPan >< SPan >< EMOJI_34 ></ SPan >< SPan >< EMOJI_35 ></ SPan >< SPan >< EMOJI_36 ></ SPan >< SPan >< EMOJI_37 ></ SPan >< SPan >< EMOJI_38 ></ SPan >< SPan >< EMOJI_39 ></ SPan >< SPan >< EMOJI_40 ></ SPan >< SPan >< EMOJI_41 ></ SPan >< SPan >< EMOJI_42 ></ SPan >...}}
Voici
Avertissement : Je ne connais rien au python, donc je suis sûr qu'il y a toutes sortes d'inefficacités ici, mais ça fonctionne. <\/>P>
<\/>P>
import<\/> arcpyimport<\/> sys,<\/> string,<\/> os,<\/> calendar,<\/> datetime,<\/> traceback,<\/>smtplibfrom<\/> arcpy import<\/> envfrom<\/> subprocess import<\/> call# Paramètres du serveur mail<\/> 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("\n")# Démarrer le processus...<\/> starttime , sd_filename, ", peut-être qu'il n'existe pas")essayer: os.remove(sddraft_output_filename)imprimer("Supprimé avec succès ", sddraft_output_filename)sauf:imprimer("Erreur lors de la suppression du fichier ", sddraft_output_filename, ", peut-être qu'il n'existe pas") # Carte de référence à publier aprx = arcpy.mp.ArcGISProject(r"C:\PRODUCTION\GRSM_SASQUATCH\GRSM_SASQUATCH.aprx") m = aprx.listMaps("GRSM_SASQUATCH_LOCATIONS")[0]# Créer FeatureSharingDraft et définir les propriétés du service# https://pro.arcgis.com/en/pro-app/arcpy/sharing/featuresharingdraft-class.htm sharing_draft = m.getWebLayerSharingDraft:<\/SPAN>\n \n # Obtenir l'objet traceback<\/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 # Concaténer les informations concernant <\/SPAN>\n # l'erreur dans une chaîne de message<\/SPAN>\n pymsg =<\/SPAN> "ERREURS PYTHON:\nInformations de traceback:\n"<\/SPAN> +<\/SPAN> tbinfo +<\/SPAN> "\nInformations sur l'erreur:\n"<\/SPAN> +<\/SPAN> str(<\/SPAN>sys.<\/SPAN>exc_info(<\/SPAN>)<\/SPAN>[<\/SPAN>1<\/Span>]<\/span>)\n msgs =<\/span> "ERREURS ArcPy:\n"<\/span> +<\/span> arcpy.<\/span>GetMessages(<\/span>2<\/span>)<\/span> +<\/span> "\n"<\/span>\n# Retourner les messages d'erreur python pour utilisation dans <\/span>\n# outil script ou Fenêtre Python<\/span>\n arcpy.<\/span>AddError(<\/span>pymsg)<\/span>\n arcpy.<\/span>AddError(<\/span>msgs)<\/span>\n# Imprimer les messages d'erreur Python pour utilisation dans <\/span>\n# Python \/ Fenêtre Python<\/span>\n log.<\/span>write(<\/span>""<\/span> +<\/span> pymsg +<\/span> "\n"<\/span>)<\/span>\n log.<\/span>write(<\/span>""<\/span> +<\/span> msgs +<\/span> ""<\/span>)<\/span>\n log.<\/span>close(<\/span>)<\/span>\n # Définir le message email si quelque chose a mal tourné<\/span>\n SUBJECT =<\/span> "Notification de mise à jour AGOL non réussie de "<\/span>+<\/span>service \n MSG =<\/span> "Mise à jour échouée : {} - ID : {} à "<\/span>+<\/span> str(<\/span>DATE)<\/span>+<\/span> "; "<\/span> +<\/pan >pymsg < spanclass = " operatortoken " > + </ span > spanclass = " stringtoken " > "; " </ span > spanclass = " operatortoken " > + </ span > msgs \n print(MSG)\n print(emailList)\n \n # Envoyer un email notifiant le gestionnaire de l'archive réussie\n #MESSAGE = "\\ From: %s To: %s Subject: %s %s" % (FROM, ", ".join(TO), SUBJECT, MSG)\n MESSAGE = "Subject: %s\\n\\n%s" % (SUBJECT, MSG)\n try:\n try:\n print("Connexion au serveur...")\n server = smtplib.SMTP(SERVER,PORT)\n try:\n print("Connexion...")\n try:\n print("Envoi du mail...")\n server.sendmail(FROM, TO, MESSAGE)\n except Exception as e:\n print("Erreur d'envoi du mail\\n" + e.message)\n except Exception as e:\n print("Erreur d'authentification serveur : vérifier les identifiants \n" + e.message)\n except Exception as e:\n print("Erreur de connexion au serveur : vérifier l'URL du serveur et le port de communication (25 par défaut) \n" + e.message)\n \n print("Quitter.")\n server.quit()\n \n except Exception as e:\n print(e.message) \n</ SPan >< SPan >< EMOJI_23 ></ SPan >< SPan >< EMOJI_24 ></ SPan >< SPan >< EMOJI_25 ></ SPan >< SPan >< EMOJI_26 ></ SPan >< SPan >< EMOJI_27 ></ SPan >< SPan >< EMOJI_28 ></ SPan >< SPan >< EMOJI_29 ></ SPan >< SPan >< EMOJI_30 ></ SPan >< SPan >< EMOJI_31 ></ SPan >< SPan >< EMOJI_32 ></ SPan >< SPan >< EMOJI_33 ></ SPan >< SPan >< EMOJI_34 ></ SPan >< SPan >< EMOJI_35 ></ SPan >< SPan >< EMOJI_36 ></ SPan >< SPan >< EMOJI_37 ></ SPan >< SPan >< EMOJI_38 ></ SPan >< SPan >< EMOJI_39 ></ SPan >< SPan >< EMOJI_40 ></ SPan >< SPan >< EMOJI_41 ></ SPan >< SPan >< EMOJI_42 ></ SPan >...}}
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.
Les membres connectés peuvent publier, suivre les mises à jour, et plus encore. Nouveau ici ? Inscrivez-vous gratuitement.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.