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.




GanttView Edit in ModalDialog öffnen.

Geprüfte Antwort Dieser Beitrag hat 5 Antworten

Ohne Rang
39 Beiträge
Lechiffre erstellt 20 Okt. 2014 14:43
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hey Community , ich würde gerne wenn ich in einer Task liste die GanttView anzeigen. (Funst auch)

 

Dann würde ich gerne für den Anwender folgendes gewährleisten das wenn der Nutzer im Ganttview selber editiert das sich ein ModalDialog öffnet.

 

Bei mir wird in Moment nur die EditForm angezeigt , trotz das ich gesagt habe bitte Formulare in Dialog öffnen.

 

Ist das machbar? Wenn ja wie reagiere ich auf den Editclick im view?

 

Dann habe ich noch eine 2te Frage:

 

In diesem Ganttview sollen nur von bestimmten Nutzern Felder bearbeitet werden können.Aber alle angezeigt werden auch im EditModus.

 

Ich habe schon versucht per PowerShell die Felder als ReadOnly=  $false zu deklarieren dennoch kann der bestimmte User die Felder hin und her editieren wie er lustig ist.

 

Ich denke ich werde nicht drum rum kommen einen EventReciver zu schreiben der im ItemUpdating auf die Gruppe abfragt ob die das Darf und wenn nicht halt nicht abzuspeichern. Oder gibt es einen Eleganteren Weg?

 

 Danke schonmal im Vorraus,

 

Gruß

Alle Antworten

Ohne Rang
39 Beiträge
Lechiffre Als Antwort am 21 Okt. 2014 08:51
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Kann mir keiner helfen :( 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 21 Okt. 2014 09:23
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das ist eine so extrem komplizierte Angelegenheit, daß man es nicht so einfach erklären kann. Das Grid und die Ganttansicht werden von zwei JavaScript-Dateien (jsgrid.js und gantt.js) gerendert und genau dort müßte man eingreifen. Die Dateien sind allerdings ziemlich groß und komplett undokumentiert. Ich habe da schon mit Kleinigkeiten ewig viel Zeit vertan...

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
39 Beiträge
Lechiffre Als Antwort am 21 Okt. 2014 11:19
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ok das habe ich auch gesehen ich war da schon drin aber hab angst daran was zu machen :D :D ! 

 

 

Danke also erstmal so leicht nicht zu lösen :/ 

 

Hab das mit der anderen Frage lösen können : 

 

Per Eventreciver :

        public override void ItemUpdating(SPItemEventProperties properties)

        {

            using(SPSite site = new SPSite("http://sp2013/"))

            {

                using (SPWeb web = site.RootWeb)

                {

                    bool _inguser = false;

                    SPGroupCollection collGroups = web.Groups;

                    foreach (SPGroup oGroup in collGroups)

                    {

                        if (oGroup.ID == 7)

                        {

                            if (oGroup.ContainsCurrentUser)

                            {

                                _inguser = true;

                            }

                        }

                    }

 

                    SPList list = web.Lists[properties.ListId];

                    SPField vorgangsNamefield = list.Fields["Vorgangsname"];

                    SPField VorgaengerNameField = list.Fields["Vorgänger"];

                    if (_inguser)

                    {

                    properties.ErrorMessage = "";

                    if (!AreEqualStringObjects(properties.ListItem[vorgangsNamefield.InternalName], properties.AfterProperties[vorgangsNamefield.InternalName]))

                    {

                        properties.Cancel = true;

                        properties.ErrorMessage = "Vorgangsname ist nicht editierbar";

                    }

                    if (!AreEqualStringObjects(properties.ListItem[VorgaengerNameField.InternalName], properties.AfterProperties[VorgaengerNameField.InternalName]))

                    {

                        properties.Cancel = true;

                        properties.ErrorMessage = "Vorgänger ist nicht editierbar";

                    }

                   }

                    else

                    {

                        properties.Cancel = false;

                    }

 

                }

            }

        }

        public bool AreEqualStringObjects(object obj1, object obj2)

        {

            if (obj1 == null)

                return obj2 == null;

            if (obj2 == null)

                return true;

            return obj1.ToString() == obj2.ToString();

        }

 

 

Ist das Ok so oder gibt es nen anderen eleganteren Weg? 

 

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 21 Okt. 2014 11:43
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Lechiffre"]Ist das Ok so oder gibt es nen anderen eleganteren Weg?[/quote]

Grundsätzlich ist das schon OK, nur ein paar Verbesserungsvorschläge:

Du holst Dir die Liste neu aus dem Web, könntest aber auch gleich properties.List verwenden.

Du holst Dir die beiden Felder über ihren sichtbaren Namen. Der kann sich aber sehr leicht ändern und Du hast ein Problem, falls mit mehreren Sprachen gearbeitet wird. Ich würde das auf den internen Namen umstellen, den Du auch fest im Code hinterlegen kanns - er ändert sich ja nicht. Die Felder brauchst Du dann gar nicht und kannst direkt z.B. AfterProperties["InternerName"] schreiben.

Deine Funktion AreEqualStringObjects liefert ein falsches Ergebnis true, wenn obj1 nicht null und obj2 null ist.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
39 Beiträge
Lechiffre Als Antwort am 22 Okt. 2014 10:18
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ja danke ich werde das sowieso nochmal überarbeiten. 

 

Das mit dem modaldialog gehe ich heute an werde dann mal was posten gruß.