| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für EPLAN |
| |
 | E-world: Standards und datengetriebene Automatisierung für die Energiewende, eine Pressemitteilung
|
Autor
|
Thema: eView/eManage upload via API-Skript (458 / mal gelesen)
|
CircuitBreakerPaul Mitglied
 Beiträge: 6 Registriert: 13.02.2024 EPLAN 2023 Update 7 (EPLAN 2.7 HF10) Win 10 Enterprise
|
erstellt am: 17. Feb. 2025 15:20 <-- editieren / zitieren --> Unities abgeben:         
Hallo, wir versuchen bei uns gerade die Verwendung von eView einzuführen. Eines unserer größeren Probleme ist aktuell noch der sehr lange Prozess des Hochladens. eManage hochladen -> eView veröffentlichen -> Kommentar hinzufügen Da man ja zwischen den einzelnen Schritten immer recht lang warten muss da die Cloud ja teilweise extrem langsam ist haben wir überlegt dies teilweise über die Cloud API und einem Skript zu automatisieren. Meine Frage: Hat hier jemand schon ein kleines Beispielskript, welches nur den Basic Upload + eView veröffentlichen durchführt? Mit dem Scripting in EPLAN kenn ich mich mittlerweile sehr gut aus (dank Johann Weihers Buch) aber von der Cloud API hab ich leider absolut keine Ahnung und mit der EPLAN Hilfe dazu komm ich auch noch nicht so wirklich zurecht. Des weiteren ist meine Frage ob ich den ganzen Upload und veröffentlichen Prozess in einen einfachen EPLAN c# Skript machen kann oder ob es da sinnvoller wäre eine separates Programm zu schreiben, welches dann nur durch ein Eplan Skript aufgerufen wird. (der Grund wäre, dass man dann EPLAN schließen kann, während das externe Programm sich noch ums eView Veröffentlichen des Uploads kümmert) Über ein kleine funktionierendes Beispielskript und jeglichen Input würde ich mich freuen. LG Paul ------------------ Wer nichts weiß, muss alles glauben! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pxecad Mitglied
 
 Beiträge: 260 Registriert: 13.02.2015 - - - - - - - - - - - - - - - - - - - - - Electric P8 2024 U1 Pro Panel 2024 U1 EEC Professional 2023 (Web EEC) - - - - - - - - - - - - - - - - - - - -
|
erstellt am: 17. Feb. 2025 15:37 <-- editieren / zitieren --> Unities abgeben:          Nur für CircuitBreakerPaul
|
apps4eplan Mitglied freier Entwickler
 
 Beiträge: 130 Registriert: 26.11.2020 EEC Professional in allen Versionen
|
erstellt am: 21. Feb. 2025 10:11 <-- editieren / zitieren --> Unities abgeben:          Nur für CircuitBreakerPaul
Und aus diesem "Vorfühlen" zu dem Thema ist eine stabile und praktikable Lösung geworden, die mittlerweile auch den Umstieg von 2024 auf 2025 unbeschadet überstanden hat; läuft vollautomatisch in der Nacht mit einem Windowstask los und ballert die Projekte in die Cloud ------------------ sind doch alles nur Nuller und Einser :-) !!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CircuitBreakerPaul Mitglied
 Beiträge: 6 Registriert: 13.02.2024 EPLAN 2023 Update 7 (EPLAN 2.7 HF10) Win 10 Enterprise
|
erstellt am: 24. Feb. 2025 15:24 <-- editieren / zitieren --> Unities abgeben:         
In der API Hilfe hab ich jetzt auch schon herumprobiert, aber in ein funktionierendes Skript bekomm ich es noch nicht ganz. @apps4eplan Hast du da vielleicht ein ein simples Skript, welches den Upload durchführt und das du hier teilen könntest? LG Paul ------------------ Wer nichts weiß, muss alles glauben! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
apps4eplan Mitglied freier Entwickler
 
 Beiträge: 130 Registriert: 26.11.2020 EEC Professional in allen Versionen
|
erstellt am: 25. Feb. 2025 08:58 <-- editieren / zitieren --> Unities abgeben:          Nur für CircuitBreakerPaul
|
F.S. Moderator
    
 Beiträge: 1924 Registriert: 23.04.2003 EPLAN Electric P8 2025 Prof.
|
erstellt am: 25. Feb. 2025 11:23 <-- editieren / zitieren --> Unities abgeben:          Nur für CircuitBreakerPaul
Hallo, so gehts per Skript:
Code:
// Cloud Project upload.cs // // lädt ein Projekt in die EPLAN Cloud nach eMANAGE hoch // // Copyright by Frank Schöneck, 2023 // letzte Änderung: // V1.0.0, 28.09.2023, Frank Schöneck, Projektbeginn // // für Eplan Electric P8, ab V2023using Eplan.EplApi.Scripting; using System.Net.Http.Headers; using System.Net.Http; using System.Threading.Tasks; public class Cloud_ProjectUpload_Class { [Start] public async Task Cloud_ProjectUploadAsync() { string PAT_EPLAN_EMANAGE = "myPAT!!!"; var projectStoreIoServiceClient = new HttpClient(); projectStoreIoServiceClient.DefaultRequestHeaders.Accept.ParseAdd("*/*"); projectStoreIoServiceClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", PAT_EPLAN_EMANAGE); var content = new MultipartFormDataContent(); var folderName = "my/target/folder"; content.Add(new StringContent(folderName), "folder"); var fileName = @"C:\Temp\myProject.zw1"; var fileContent = System.IO.File.ReadAllBytes(fileName); var byteArrayContent = new ByteArrayContent(fileContent); content.Add(byteArrayContent, "files", "myProject.zw1"); var createProjectResponse = await projectStoreIoServiceClient.PostAsync("https://api.eplan.com/projectStoreIOService/v1.0/projects?format=zw1", content); System.Windows.Forms.MessageBox.Show(createProjectResponse.StatusCode.ToString()); } }
------------------ grüße FrankS Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nairolf Ehrenmitglied Elektroingenieur
    
 Beiträge: 1998 Registriert: 21.01.2006 EPLAN Electric P8 2024.0.3 Update 1 (Build 21460) EPLAN Pro Panel Professional Addon EPLAN Fluid Addon
|
erstellt am: 12. Mrz. 2025 11:00 <-- editieren / zitieren --> Unities abgeben:          Nur für CircuitBreakerPaul
Hallo zusammen ! @Frank: Danke für das Beispiel Möchte hier nicht pingelig rüberkommen, aber ich würde zum Instanzieren eines HttpClients die Funktionen des Eplan Identity Client verwenden Nicht offensichtlich, da in der API Hilfe beschrieben: das funktioniert auch einwandfrei in Scripten Einer der Vorteile: man muss keinen PAT erstellen, und es wird die Identität des Users beim Anmelden an der Eplan Cloud verwendet (beim Eplan-Start), somit kann man ein Script auch besser an andere User verteilen, selbst wenn die mit anderen Organisationen arbeiten wollen/müssen und auch das Problem eines ablaufenden PATs wäre eliminiert Wenn ein Endpoint verwendet wird, der seitens Eplan deprecated wird, so würde man über den IdentityClient auch automatisch in den Systemmeldungen einen Eintrag erhalten, dass man Ressourcen nutzt, die ggf. demnächst veraltet sind (und wann genau das der Fall sein wird) Darüber hinaus (etwas theoretischer Natur): Ein HttpClient instanziert über den IdentityClient setzt im user-agent Header des Requests exakt (und automatisch) die verwendete Eplan-Version usw. dadurch kann im Fall eines Breaking Changes seitens Eplan, ggf. ein versionsabhängiges re-routing eingerichtet werden, d.h. technisch köntne so ein Endpunkt stabiler bleiben (auch für ältere Versionenen). Anlog zum Beispiel von Frank, einfach quick & dirty (keine Garantie auf Fehlerfreiheit )
Code: using Eplan.EplApi.Scripting; using System.IO; using System.Net.Http.Headers; using System.Net.Http; using System.Threading.Tasks;public class Cloud_ProjectUpload_Class { [Start] public async Task Cloud_ProjectUploadAsync() { // Initialize httpClient object var baseurl = "https://api.eplan.com/projectStoreIOService/v1.0"; HttpClient httpClient = null; IEIdentityClient IdentityClient = EIdentityClient.Instance; IdentityClientResponse httpClientRespone = IdentityClient.GetHttpClient("eManagePaid", baseurl, ref httpClient); // Post project if (httpClientRespone.IsSuccess) { var multipartFormDataContent = new MultipartFormDataContent(); var folderName = "my/target/folder"; multipartFormDataContent.Add(new StringContent(folderName), "folder"); var fileName = @"C:\Temp\myProject.zw1"; FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); multipartFormDataContent.Add(new StreamContent(fileStream), "files", Path.GetFileName(fileName)); string _uri = baseurl + "/projects?format=zw1"; var response = httpClient.PostAsync(_uri, multipartFormDataContent).Result; string message = "Status: " + response.StatusCode.ToString() + System.Environment.NewLine + "Upload job id: " + response.Headers.Location.ToString(); new Decider().Decide(EnumDecisionType.eOkDecision, message, "Post result", EnumDecisionReturn.eOK, EnumDecisionReturn.eOK); } } }
------------------ Der Fuchs ist schlau und stellt sich dumm. Bei vielen ist es andersrum  ------------------------------------------ Da lernt man mühevoll laufen und sprechen, und nun soll ich stillsitzen und die Klappe halten ! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
F.S. Moderator
    
 Beiträge: 1924 Registriert: 23.04.2003 EPLAN Electric P8 2025 Prof.
|
erstellt am: 12. Mrz. 2025 14:00 <-- editieren / zitieren --> Unities abgeben:          Nur für CircuitBreakerPaul
Hallo nairolf ich bin froh das du so pingelig bist, dadurch können wir alle nur was lernen Ich glaube mein Script ist entstanden bevor mir die Möglichkeiten des IdentityClient bekannt wurden. Meine Scripte für die Cloud sind nur Konzepte um zu schauen wie es funktioniert, im produktiven Einsatz habe ich die nicht. Danke für deine ausführlichen Erläuterungen zum Thema. ------------------ grüße FrankS Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |