SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




App entwickeln

Unbeantwortet Dieser Beitrag hat 6 Antworten

Ohne Rang
354 Beiträge
ExpoIT erstellt 11 Juli 2017 14:13
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo, 

ich versuche es mal gaaaaanz in Ruhe zu erklären:

Ich möchte eine Seite angezeigt haben, welches einige Werte aus einer Liste holt und einige Daten der User einzutragen hat, danach soll anhand der Werte eine Berechnung mithilfe einiger anderer Listen durchgeführt werden und ausgegeben werden.

So in etwa soll es aussehen:

Nummer: (Wert wird aus Liste1 in Site geholt)

Manager: (Wert wird aus Liste2 in Site geholt)

Tiefe A B C (Dargestellt in Radiobutton, muss der User auswählen)

OK (Nachdem dieser Button betätigt wird, werden Ausgaben und Berechnungen vollbracht)

Die SharePoint-gehostete App hat 2 Dateien. Default.aspx: hier möchte ich mein "Formular" mit Html darstellen.

App.js: hier kommt dann das Javascript rein.

Dazu habe ich hier folgende Code:

'use strict';

ExecuteOrDelayUntilScriptLoaded(initializePage, "sp.js");

function initializePage() {

var context = SP.ClientContext.get_current();  //hier liegt der Fehler, weil er nicht darauf zugreifen kann???

var rootWeb = context.get_site().get_rootWeb();  ///falsch???

var list = rootWeb.get_lists().getByTitle('Projects');  //Zugriff ok?

var caml = new SP.CamlQuery();

caml.set_viewXml("<Query><Where><And><IsNotNull><FieldRef Name='Nummer' /></IsNotNull><And><IsNotNull><FieldRef Name='Customer_x0020_Name' /></IsNotNull><IsNotNull><FieldRef Name='Presentation_x0020_Date' /></IsNotNull></And></And></Where></Query>");

var listItems = list.getItems(caml);

context.load(listItems, 'Include(Nummer, Customer_x0020_Name, Presentation_x0020_Date)');

 

context.executeQueryAsync(Function.createDelegate(this, function () {

saveItem();

}), Function.createDelegate(this, function () {

alert('FEEEEHLEEERR');

}));

}
Ich bekomme das Alertfenster mit FEEEEHLEEERR angezeigt. Ich denke eigentlich, dass es daran liegt, dass die App wahrscheinlich nicht auf die Site zugreifen kann, worin sich die Liste befindet von der ich Infos holen möchte, oder? Wenn ja, wo ist der Fehler, bzw. wie schaffe ich es eine vorerst allgemeine App dazuzubringen, dass es auf Listen bestehender Seiten zugreift?
Danke

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 11 Juli 2017 16:02
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das sieht im Grunde alles sehr gut aus, bis auf die Tatsache, daß Du damit in der Website der App arbeitest. Du möchtest aber auf das sog. Host Web zugreifen und da sollte das hier weiterhelfen:

https://blogs.msdn.microsoft.com/nickpinheiro/2015/01/30/build-a-sharepoint-hosted-app-to-access-list-data-in-your-host-web-using-the-rest-api-in-10-easy-steps/

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 11 Juli 2017 16:04
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ach ja, noch was: im Erfolgsfall rufst Du eine fucntion saveItem auf. Die hat aber keinerlei Zugriff auf listItems, die in der anderen Funktion definiert ist. Du kannst sie aber z.B. als Parameter an saveItem übergeben.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
354 Beiträge
ExpoIT Als Antwort am 12 Juli 2017 14:01
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Danke, habe folgende Site zur Hilfe genommen. 

Trotzdem sind einige Fragen aufgekommen:

ich benutze zur Entwicklung der App die Entwicklersite, die ich mal erstellte http://server/sites/dev

bei diesem Beispiel bekomme ich mit alert(hostweburl) genau diese Zeile angezeigt: http://server/sites/dev

mit der nächsten zeile (alert(list)) bekomme ich [object Object] angezeigt. 

meine Liste befindet sich auf einer ganz anderen sitecollection (https://sharepoint/mycompany/sites), das muss ich wohl anders abfragen?

Habe ich die Entwicklerumgebung falsch eingerichtet, oder kann ich es irgendwie zum Laufen bringen?

Ich weiß gerade sowieso nicht, ob ich wirklich den richtigen Weg für meine Aufgabe eingeschlagen habe. Bin daher etwas hippelig, weil die Zeit drängt....

Viele Grüße AS

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 12 Juli 2017 14:11
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="ExpoIT"]mit der nächsten zeile (alert(list)) bekomme ich [object Object] angezeigt.[/quote]

Das ist der Standard bei Objekten (und übrigens dasselbe wie in C#). Lasse Dir stattdessen den Title oder die Url ausgeben. Oder noch einfacher, schaue es Dir im Debugger an. Da kannst Du das gesamte Objekt erforschen.

[quote user="ExpoIT"]Ich weiß gerade sowieso nicht, ob ich wirklich den richtigen Weg für meine Aufgabe eingeschlagen habe[/quote]

Das wird Dir wohl niemand von außen sagen können, ohne die Anforderungen sehr viel detaillierter zu kennen. Sowas geht über ein Forum nicht...

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
354 Beiträge
ExpoIT Als Antwort am 12 Juli 2017 14:38
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="ExpoIT"]

ich benutze zur Entwicklung der App die Entwicklersite, die ich mal erstellte http://server/sites/dev

bei diesem Beispiel bekomme ich mit alert(hostweburl) genau diese Zeile angezeigt: http://server/sites/dev

[/quote]

wie greife ich auf die Hauptseite https://sharepoint/mycompany/sites zu?

Hiermit kann ich auf eine Liste unter http://server/sites/dev zugreifen und anzeigen lassen.

appWebContext = new SP.ClientContext.get_current();  

hostweburl = decodeURIComponent($.getUrlVar("SPHostUrl"));  

var hostwebContext = new SP.AppContextSite(appWebContext, hostweburl);  

var list = hostwebContext.get_web().get_lists().getByTitle('MyList');

var query = new SP.CamlQuery();  

query.set_viewXml("<Query><Where><IsNotNull><FieldRef Name='Title' /></IsNotNull></Where></Query>");  

listResult = list.getItems(query);  ............

[quote]

Ich weiß gerade sowieso nicht, ob ich wirklich den richtigen Weg für meine Aufgabe eingeschlagen habe

 

Das wird Dir wohl niemand von außen sagen können, ohne die Anforderungen sehr viel detaillierter zu kennen. Sowas geht über ein Forum nicht...

[/quote]

kurz erklärt: auf einer Site sollen

1. Informationen, welche aus einer externen Liste geholt werden und

2. es soll einen Part geben, wo ein User Eintragungen machen kann und per Klick auf OK sollen die Daten gespeichert werden.

 

Viele Grüße AS

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 12 Juli 2017 15:13
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Mit dem Code einer App kannst Du maximal innerhalb der Site Collection agieren, in der die App aktviert wurde. In Deinem Fall ist das die Developer Site unter /sites/dev. Darüber hinaus geht nichts.

Das heißt im Umkehrschluss, daß Du dort die ganze Infrastruktur brauchst, also Spalten, Inhaltstypen und Listen, die von der App benötigt werden. Meistens macht man es deshalb so, daß die App prüft, ob es das alles gibt und falls nicht anlegt. Das ist aber eine Menge Arbeit und ganz besonders wenn man im Falle eine SP-Hosted App nur JavaScript hat. Alternative ist es, diese Artefakte alle innerhalb des sog. App Web anzulegen. Das ist die Website der SP-hosted App und dort kann man das alles durch XML anlegen lassen. Der Vorteil dieser Vorgehensweise ist, daß man egal wo die App aktiviert wird, es garantiert immer die richtige Umgebung gibt. Ein Benutzer aktiviert also die App und hat damit alles was es braucht und kann sofort damit arbeiten.

Viele Grüße
Andi
af @ evocom de
Blog