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.


RemoveUser

Unbeantwortet Dieser Beitrag hat 7 Antworten

Ohne Rang
18 Beiträge
Entwickler1979 erstellt 11 Apr 2013 10:47
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo ich verwende derzeit einen SP 2007.Ich wollte ein Custom Acitivitie bauen für einen SPDesigner Workflow.Ich habe mitlerweile verschiedene Versionen getestet aber er wird immer wieder abgeborchen.

 

Quellcode:

       public static DependencyProperty UserProperty
            = DependencyProperty.Register("User", typeof(string), typeof(RemoveUserFromGroup));
        public static DependencyProperty GroupProperty
            = DependencyProperty.Register("Group", typeof(string), typeof(RemoveUserFromGroup));

        [Category("My WF Actions")]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible), Browsable(true)]
        public string User
        {
            get { return ((string)(base.GetValue(RemoveUserFromGroup.UserProperty))); }
            set { base.SetValue(RemoveUserFromGroup.UserProperty,value);}
        }

        [Category("My WF Actions")]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible), Browsable(true)]
        public string Group
        {
            get { return ((string)(base.GetValue(RemoveUserFromGroup.GroupProperty))); }
            set { base.SetValue(RemoveUserFromGroup.GroupProperty,value);}
        }

        protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
        {
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                using (SPSite site = new SPSite(SPContext.Current.Web.Url))
                {
                    using (SPWeb web = site.OpenWeb())
                    {
                        SPGroup spGroup = web.Groups[Group];

                        if (spGroup != null)
                        {
                            SPUser spUser = web.EnsureUser(User);
                            spGroup.RemoveUser(spUser);
                            spGroup.Update();
                        }
                    }
                }

            });

            return ActivityExecutionStatus.Closed;
        }

 

Das ACTION File

 <Action Name="Remove User From Group"
      ClassName="MyWFActions.RemoveUserFromGroup"
    Assembly="MyWFActions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=668c9b6670781224"
    AppliesTo="all" Category="My WF Actions">
      <RuleDesigner
         Sentence="Remove %1 From %2">
        <FieldBind Field="User" DesignerType="singlePerson"
           Text="user" Id="1"/>
        <FieldBind Field="Group" DesignerType="singlePerson"
                   Text="group" Id="2"/>
      </RuleDesigner>
      <Parameters>
        <Parameter Name="User" Type="System.String, mscorlib"
          Direction="In" />
        <Parameter Name="Group" Type="System.String, mscorlib"
          Direction="In" />
      </Parameters>
    </Action>

vielleicht kann mir jemand helfen

lg

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 11 Apr 2013 11:00
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Im Workflow kannst Du kein SPContext.Current verwenden. Du bekommst das aktuelle Web aus dem executionContext.

Das hättest Du aber im Debugger auch selbst herausfinden können. Und Du solltest auch eine Fehlerbehandlung einbauen, weil Du nicht sicher sein kannst, ob der Activity auch gültige Gruppen- und Benutzernamen übergeben werden und das sonst den gesamten Workflow abbricht.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
18 Beiträge
Entwickler1979 Als Antwort am 15 Apr 2013 15:08
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Super, hat geklappt. Danke nochmals. Eine Frage hätte ich noch. Wie könnte man das ganze einfacher Deployen(Setup). Der Weg Installation in GAC,Actions Datei und die Webconfig anpassen, ist doch ein wenig nervig.

lg

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 15 Apr 2013 16:14
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Indem Du das Ganze in eine Solution (wsp-Datei) verpackst. In die Solution packst Du ein Feature mit Scope WebApplication, in dessen FeatureActivated-Ereignis Du die Änderungen in die web.config schreibst. Beachte auch, daß Du evtl. mehrere action-Dateien brauchst (pro Sprache eine).

Leider ist das Verpacken als Solution in VS 2008 nicht integriert und Du mußt es selbst machen. Hier eine Anleitung, die ich auf die Schnelle gefunden habe: http://www.sharepointnutsandbolts.com/2007/07/building-and-deploying-sharepoint.html

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
18 Beiträge
Entwickler1979 Als Antwort am 24 Apr 2013 08:59
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Super danke dir, ich habe das ganze mit dem WSP Builder gemacht und hat auch super geklappt. Nur  eine Blöde Frage, Installation in den GAC --> Geht super  auch das einbinden der Actions Datei, aber wie komme ich an die web.confg ran .Muss man die Manuell immer hinzufügen oder kann man das auch mit der wsp mitgeben. Danke  nochmals für die Unterstützung.

lg

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 25 Apr 2013 09:02
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das hängt davon ab welche Änderungen Du an der web.config machen möchtest. Den SafeControl-Eintrag z.B. für Webparts kann man ganz einfach deklarativ per XML im Solution-Manifest mitgeben. Andere, eigene Änderungen kann man per Code (SPWebConfigModification) z.B. im FeatureActivated machen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
18 Beiträge
Entwickler1979 Als Antwort am 25 Apr 2013 09:11
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo, ich habe das mit der SpWebConfigModification gelöst. Eine letzte Frage habe ich da noch, wenn man die Custom Activities deployt als Featuere müssen die dann Globally sein(wo liegt der Unterschied dabei). Und Danke nochmals für die schnelle Hilfe.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 25 Apr 2013 09:39
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Im Grunde gibt es nicht wirklich einen Unterschied und Du kannst das auch nicht beeinflussen. Es hängt davon ab, welche Bestandteile die Solution enthält.

Viele Grüße
Andi
af @ evocom de
Blog