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

GanttView Edit in ModalDialog öffnen.

bewertet von 0 Usern
Beantwortet Dieser Beitrag hat 2 Geprüfte Antworten | 5 Antworten | 1 Follower

Top-500-Beitragsschreiber
39 Beiträge
Lechiffre erstellt in 20 Okt 2014 14:43

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ß

Beantwortet Geprüfte Antwort

Top-500-Beitragsschreiber
39 Beiträge

Kann mir keiner helfen :( 

Top-10-Beitragsschreiber
19.137 Beiträge

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

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

Alle Antworten

Top-500-Beitragsschreiber
39 Beiträge

Kann mir keiner helfen :( 

Top-10-Beitragsschreiber
19.137 Beiträge

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
Top-500-Beitragsschreiber
39 Beiträge

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? 

 

 

Top-10-Beitragsschreiber
19.137 Beiträge

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

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
Top-500-Beitragsschreiber
39 Beiträge

Ja danke ich werde das sowieso nochmal überarbeiten. 

 

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

Seite 1 von 1 (6 Elemente) | RSS