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.




List Item aus anderer Liste löschen

Geprüfte Antwort Dieser Beitrag hat 6 Antworten

Ohne Rang
159 Beiträge
thunderstorm erstellt 7 Dez. 2016 15:18
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Ich habe mittlerweile eine recht gute Lösung für eine Event Registrierung (Meetings etc.).

Es funktioniert, dass man ....
als Event Organisator einen Event erstellen kann und dort angeben kann, wieviele Sitze zur Verfügung stehen Spalte "Seats" und wieviele davon schon besetzt sind (FilledSeats).
SeatsIncrenemt zählt jeweils herauf. In der Liste Attendees werden dann User und meetingID gespeichert und im Titlefield ein Concatenate .... "Username() + " ist am Event " + Meeting + "angemeldet... so in der Art.

Wenn man sich nun versucht sich für einen Event ein zweites Mal anzumelden (Javascript doublecheck) schaut das Script ob der Benutzer mit diesem Event bereits angemeldet ist.
Wenn das zutrifft, kriegt der Benutzer eine Meldung und sieht nun nicht mehr den "Anmelden" Link sondern einen "Abmelden" Link.
Dies wird in UnRegister Liste gespeichert, analog zu dem Attendees.

Das funktioniert soweit auch bestens.

Nun zu meinem Problem....

Nach dem ABmelden, sollte AUCH das jeweilige ListItem aus der Liste Attendees gelöscht werden und das kriege ich nicht hin.
Wenn ich das richtig verstanden habe, muss das stattfinden nachdem der Unregistereintrag gemacht wurde.
Also den List-Workflow (unterhalb der UnRegister Liste) ergänzen.
Damit habe ich aber noch fast nicht gearbeitet und steh da im Schilf. Ich befinde mich doch im DefaultDisplayview Feld des Calendars.
Nach dem Klick auf "Abmelden" öffnet sich ein ModalWindow mit den Feldern wo ich sehe welcher Event und dass ich selber als User mich anmelde (Bestätigung). zusätzlich ist ein Button "Absenden" der die Daten absendet.

Wie geh ich da am besten vo und welche Aktionen benötige ich für....

das feststellen welches das analoge ListItem in Attendees ist und dieses Item (in Attendees löschen)

Ich hoffe es kann da jemand helfen.

Ich kann auch gerne die Lösung hier rein posten. Ist dann einfach "quite a bit" Text und Code. :-)

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 7 Dez. 2016 16:22
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="thunderstorm"]Wie geh ich da am besten vo und welche Aktionen benötige ich für.... [/quote]

Vielleicht solltest Du uns zuerst verraten mit welcher Technologie Du arbeitest (Webpart, benutzerdefiniertes Formular mit JS, CSR, ...). Man kann sonst nicht viel dazu sagen...

[quote user="thunderstorm"]das feststellen welches das analoge ListItem in Attendees ist [/quote]

Weiter oben schreibst Du, Du hättest das bereits festgestellt um zu verhindern, daß sich ein Benutzer erneut anmeldet.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
159 Beiträge
thunderstorm Als Antwort am 8 Dez. 2016 08:05
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ciao Andi
Danke für Deine Antwort. Yoo, werde ich gerne, ist aber einiges....ABER ich denke es sind sicher einige die so etwas gebrauchen können. Ich hoffe das ist so in Ordnung.
Im Wesentlichen sind es ...
1 Calendar,
2 CustomLists (Attendees und UnRegister)
3 List Workflows
       Attendees
       UnRegister
       SetStaticID
2 QueryString (Attendees und UnRegister)
1 Script: Registering/UnRegistering
1 Script: Doublecheck.... 

Was noch fehlt

Was eben noch fehlt ist, nachdem eine Abmeldung per Klick auf das im Formular UnRegister und nachdem der Benutzer in der UnRegister Liste erfasst wurde, dass dieser in Attendees gelöscht wird.

Vorgehen

Calendar List (Calendar View)

Zusätzliche Felder

 

  • Seats                    – Number field
  • FilledSeats         – Number field
  • RemainingSeats
  • Calculated Field
    -   Formula:                            =Seats-FilledSeats
    -   Data type returned:      Number
  • SeatsIncrement
    -   Calculated Field
  • -      Formula:                            =FilledSeats+1
    -      Data type returned:      Number
  • Closed – Yes/No
    -   Default Value: No
  • StaticID – Number
    Note: This is a Hack we have to put in because we can’t use the real ID field in a calculated column. We will use a workflow to fill it in correctly later. I am open to suggestions on a better way to do this
  • Register 
    -  Calculcated Field
    -      Data type returned: Single line of text
    -      Formula
    =WENN([Closed]=WAHR;"Ausgebucht, keine Anmeldung möglich!";WENN([RemainingSeats]>0;"<a href='#' onclick='OpenLandLRegistration(" & StaticID & ")'>Register</a>";"Maximale Anzahl erreicht")) 

 

Zusätzliche Felder für UnRegister

  • Name: SeatsDecrement
    o   Type: Calculated
    o   Formula: =FilledSeats-1
    o   Data Type returned: Number 
  • Name: UnRegister
    o   Type: Calculated
    o   Formula: 
          ="<a href='#' style='color:red' onclick='OpenLandURegistration("&StaticID&")'>Click Here to UnRegister</a>"
    o   Date Type return: Single line of text

Attendees List
custom SharePoint list, add these fields:

  • Username
    o   Single line of Text Field
    o   Required
  • Meeting
    o   Lookup Field
    §  Get Information from – Calendar List created earlier
    §  In this column – Title field
  • MeetingID
    o   Single line of text field

 

Workflows

SetStaticClassID Workflow

The SetStaticClassID Workflow is really a hack because SharePoint won’t let you use the ID field in the calculated columns. All we are doing is setting a number field with the ID field every time the calendar item is created or modified. For our particular situation, this will work fine. However, don’t assume this technique will work in every situation you need to use the ID field in a calculated column.

Go to the Calendar List created earlier. Edit the Calendar List in SharePoint Designer (note: you will need SharePoint Designer 2010 to do this)

 · Choose List Workflow in the Ribbon of SharePoint Designer

·  Give the Workflow a good name – something like SetStaticClassID

·  Add an Action
        o   “Set Field in Current Item”

·  Click the “field” link
        o   choose StaticID

·  Click the “value” link and clickt the fx button:
       o   Data source: Current Item
      o   Field from source: ID

- Save

- Go back to the settings page for the Workflow. Set the Start Options
   for “Start Workflow automatically when an item is created” and “Start workflow automatically when an item is changed”

- Save and Publish Workflow


Registration Workflow

The Registration Workflow is one of the main parts of this solution. This is the Workflow that will update the remaining seats in the calendar list when an Attendee register for the course.

Go to the Attendee List created earlier. Edit the Attendee List in SharePoint Designer.

· Choose List Workflow in the Ribbon of SharePoint Designer

· Give the Workflow a good name – something like Registration

· Add an Action – “Update List Item”

- Click the “this list” link in the action

- Change the list to the Calendar list created earlier

- Click the “Add…” button
    Choose “FilledSeats”
    -  Click the fx button for the value
               - Data source: Calendar
               - Field from source: SeatIncrement
               - Field: ID
               - Value – click the fx button
                     - Data source: Current Item
                     - Field from source: Meeting 
In the “Find the list item” section …
    - 
Field: ID
    - Value – click the fx button 
             - Data source: Current Item
             - Field from source: Meeting 
- Save your work 
- Go back to the settings page for the Workflow. Set the Start Options for “Start Workflow automatically when an item is created” 
- Save and Publish Workshop


InfoPath Form

The end user will eventually register through the InfoPath form on the Attendees list.

- Go to the Attendees list in SharePoint
- Click the tab “Liste” à Choose to Customize the Form in the Ribbon (note: you will need InfoPath Designer to do this)
- Click “edit Form (Formular anpassen)
- AutoPopulate the Title Field: In the title field of the form
    - Right-click – Text Box Properties 
    - Default value – click the fx button
    - Add this in for the Formula:
               concat(userName(), " registration for event number ", Meeting)
      Note: copy and paste will not work on this formula. You will have to delete the “Meeting” string
      in the formula and use the “Insert Field or Group” button instead and choose the Meeting field.
 
Add a formatting rule – “Hide this control” to both
    o 
the Title
    o and MeetingID fields 
      Note: You should also delete the label for these fields and move them to the bottom of the form and
      delete the empty table rows they were in. This will make these fields invisible to the end user, but they
      will still be there to bind to the SharePoint list
In the Username field of the form
    o   Right-click – Text Box Properties
    o   Default value – click the fx button
    o   Add this in for the Formula: userName() 

Add a formatting rule to the Username field to “Disable this control
- In the Meeting field of the form
    o   Goto Ribbon Tab Control Tools – Properties (Steuerungstools - Eigenschaften)
    o   Click the “Default Value” button
    o   “Default value/Standardwert” – click the fx button
    o   Add this in for the Formula using the “Insert Field or Group” button: MeetingID 
Add a formatting rule to the Meeting field to “Disable this control
- Publish the form 

** Notiz: ich habe hier noch einen Button "Absenden" reingetan 


QueryString 
 (Attendees)

In order to automatically set the the meeting in the InfoPath form, we will use a query string to the MeetingID field. There are a few problems to this:

         1.  You can’t send querystrings to InfoPath: Solution = use a Query String Filter Web Part on the SharePoint page

         2.  The Query String Filter Web Part can’t set a lookup field. Since our Meeting column is a lookup field, this won’t work. Thus,
              we created a MeetingID field. This is a hidden field on the InfoPath form that is purely used to set the Meeting lookup field
              in the form. The end user will never see this field
 

Go to the Attendees list on the SharePoint site

- Right-Click on the “Add new item” link and choose to open in a new window or a new tab

- Now you will be on the edit form page – click Site ActionsEdit Page

- Add a (WebPart) “Query String (URL) / Filter aus Abfragezeichenfolge (URL)” (in Category “Filter”) field to the site

- Modify the Settings and add 

     o   Fiter Name – QueryString

    o   Query String Parameter Name – meeting_id 

- Connect the Query String (URL) Filter Web Part to the InfoPath Form Web Part 

    o   Use the “MeetingID” filed as the Consumer Field Name

Now when anyone comes to the new form of your Attendees list, it will be filtered by the QueryString on the MeetingID field. The InfoPath form is setup to use the MeetingID text field to populate the Meeting dropdown box. This allows us to automatically pick the dropdown of the event the attendee wishes to register from.


Javascript

The last step to this is a javascript file. The javascript does two things:

1.       Creates the dialog box javascript to open our new form. The call to this javascript method is in the calculated field on the attendees list to register

2.       Turns the calculated field column into html 
          Note: The solution below uses JQuery because it is the easiest way to loop through multiple elements
          on the client side. If you do not have JQuery in your solution then:

3.       Download the latest version of JQuery

4.       Upload the file to your SharePoint site. I usually like to use the Style Library library at the root of the site collection

5.       Add a reference to JQuery on your page:

            <script type="text/javascript" src="/Style Library/jquery-1.7.2.min.js"></script>
          Note: consider adding this as the first line of text in a Text File and then add the rest of the Javascript below to that
          same Text File. Then you can upload the Text File to a library on your site (I usually use the Style Library or Site Assets
          Library for this) and you can reference the text file from a Content Editor WebPart on the page we are creating.

IMPORTANT: Please change the url in the javascript to point to your new form (remember, you can right click on the add new on the Attendees list and open in new tab or window). This will show you the path to the new form and the List GUID. Also, make sure you keep the meeting_id at the end as a query string parameter.

 BETTER DO THE FOLLOWING:

 

  • Go to the library “calendar”
  • Click the calendar tab on the top of the ribbon
  • Click on the arrow below “form web parts /Formularwebparts and choose the “default view form”
  • Add a script editor (chapter media & content) or a content editor web part (I prefere script editor)
        o   Put the following script into this web part…. Edit the pathes and everything needed before you copy it….

 

//------------ copy the script from the following line until the end --------------

<script src="/Style%20Library/scripts/jquery-2.2.2.min.js" type="text/javascript"></script>

<script type="text/javascript">

//Creates window and opens the infopath form

function OpenLandLRegistration(meeting_id){

var options = {                                                                     

url:" /org/ict/Lists/Attendees/Item/newifs.aspx?List=049cef2a%2D3c13%2D4a6d%2Da98d%2D16a27adfd6e8&meeting_id=" + meeting_id,
// Note: the "List-ID" is important!!!! 

width: 750,

height: 450,

dialogReturnValueCallback: DialogCallback,

dialogReturnValueCallback: RefreshOnDialogClose

};

SP.UI.ModalDialog.showModalDialog(options);

}

function DialogCallback(dialogResult, returnValue){ }

  // Reformat the url in the calculated column to hyperlink

  $(function(){

    // Format link font size and weight

    $('td.ms-formlabel:contains("Register")').siblings(".ms-formbody").css("font-size", "18px");

    $('td.ms-formlabel:contains("Register")').siblings(".ms-formbody").css("background-color", "#DFDFDF");

    $('td.ms-formlabel:contains("Register")').siblings(".ms-formbody").css("border", "1px solid #AAAAAA");

    $('td.ms-formlabel:contains("Register")').siblings(".ms-formbody").css("padding-left", "20px");

    $('td.ms-formlabel:contains("Register")').siblings(".ms-formbody").css("font-weight", "bold");

 

    reformatCalculatedColumnUrl();

 

    function reformatCalculatedColumnUrl(){

      $('td.ms-formlabel:contains("Register")').siblings(".ms-formbody").each(function(){

        // alert($(this));

        $(this).html($(this).text());

      }

    );

    };

});

 

// Hides Columns

$(function() {

 

$("a[name$='StaticID']").closest("tr").hide();

$("a[name$='SeatsIncrement']").closest("tr").hide();

 

});

 

 

 

// ======= UnRegister Code.....   =================== //

 

function OpenLandURegistration(meeting_id){

var options = {

url:" /org/ict/Lists/UnRegister/Item/newifs.aspx?List=c0d33c3c%2Dea68%2D430d%2D8a46%2Df1966883e962&meeting_id=" + meeting_id,

 width: 750,

height: 450,

dialogReturnValueCallback: DialogCallback,

dialogReturnValueCallback: RefreshOnDialogClose

};

SP.UI.ModalDialog.showModalDialog(options);

}

function DialogCallback(dialogResult, returnValue){ }

  // Reformat the url in the calculated column to hyperlink

  $(function(){

    // Format link font size and weight

    $('td.ms-formlabel:contains("Register")').siblings(".ms-formbody").css("font-size", "18px");

    $('td.ms-formlabel:contains("Register")').siblings(".ms-formbody").css("background-color", "#DFDFDF");

    $('td.ms-formlabel:contains("Register")').siblings(".ms-formbody").css("border", "1px solid #AAAAAA");

    $('td.ms-formlabel:contains("Register")').siblings(".ms-formbody").css("padding-left", "20px");

    $('td.ms-formlabel:contains("Register")').siblings(".ms-formbody").css("font-weight", "bold");

 

    reformatCalculatedColumnUrl();

 

    function reformatCalculatedColumnUrl(){

      $('td.ms-formlabel:contains("Register")').siblings(".ms-formbody").each(function(){

        // alert($(this));

        $(this).html($(this).text());

      }

    );

    };

});

</script>

// -------------------- Ende Copy the Code -------------------------------------------

InfoPath Form für "UNREGISTER"

The end user will eventually register through the InfoPath form on the Attendees list.

  • Go to the UnRegister list in SharePoint
  • Click the tab “Liste” à Choose to Customize the Form in the Ribbon (note: you will need InfoPath Designer to do this)
  • Click “edit Form / Formular anpassen”
  • AutoPopulate the Title Field: In the title field of the form
        o   Right-click – Text Box Properties
        o   Default value – click the fx button
        o   Add this in for the Formula:
                  concat(userName(), " registration for event number ", Meeting)
             Note: copy and paste will not work on this formula. You will have to delete the “Meeting” string
             in the formula and use the “Insert Field or Group” button instead and choose the Meeting field.
     
  • Add a formatting rule – “Hide this control” to both
        o   the Title
        o   and MeetingID fields 
     Note: You should also delete the label for these fields and move them to the bottom of the form and delete
     the empty table rows they were in. This will make these fields invisible to the end user, but they will still be there
     to bind to the SharePoint list
  • In the Username field of the formo  
    o   Right-click – Text Box Properties
    o   Default value – click the fx button
    o   Add this in into the Formula field: 
          
    o    Add Function – choose userName()

  • Add a formatting rule to the Username field to “Disable this control

  • In the Meeting field of the form

        o   Goto Ribbon Tab Control Tools – Properties (Steuerungstools - Eigenschaften)
        o   Click the “Default Value” button
        o   “Default value/Standardwert” – click the fx button 

  •  Add this in for the Formula using the “Insert Field or Group” button: MeetingID

  • Add a formatting rule to the Meeting field to “Disable this control

  • Publish the form

 

QueryString

In order to automatically set the the meeting in the InfoPath form, we will use a query string to the MeetingID field. There are a few problems to this:

  • Go to the UnRegister list on the SharePoint site
  • Right-Click on the “Add new item” link and choose to open in a new window or a new tab
  • Now you will be on the edit form page – click Site ActionsEdit Page
  • Add a (WebPart) “Query String (URL) / Filter aus Abfragezeichenfolge (URL)” (in Category “Filter”) field to the site
  • Modify the Settings and add
        o   Fiter Name – QueryString
        o   Query String Parameter Name – meeting_id 
  • Connect the Query String (URL) Filter Web Part to the InfoPath Form Web Part
        o   Use the “MeetingID” filed as the Consumer Field Name 


Create UnRegister Workflow

Go to the UnRegister List and open the list with SharePoint Designer (we will use the same steps as you did for the Attendees List (Page 2), except we will reference the newly created columns above).

  • Create a new Workflow and name is UnRegistration
        o   Add an Action – “Update List Item
        o   Click the “this list” link in the action
        o   Change the list to the Calendar created earlier
        o   Click the “Add…” button
            o  Choose “FilledSeats
            o  Click the fx button for the value
                   o  Data source: (Events)Calendar
                   o  Field from source: SeatsDecrement
                   o  Field: ID
                   o  Value – click the fx button
                           o   Data source: Current Item
                           o   Field from source: Meeting
                  o   Click, OK, then click OK and OK again for the next window
           o  In the Find the list item section
           o  Field: ID
           o  Value – click the fx button 
                  o   Data Source: Current Item
                  o   Field from Source: Meeting
  • Click, OK, then click OK again for the next window. Now it should look like

 

InfoPath (UnRegister) Form

The end user will eventually register through the InfoPath form on the Attendees list.

  •  Go to the UnRegister list in SharePoint
  • Click the tab “Liste” à Choose to Customize the Form in the Ribbon (note: you will need InfoPath Designer to do this)
  • Click “edit Form / Formular anpassen”
  • AutoPopulate the Title Field: In the title field of the form
        o   Right-click – Text Box Properties
             o   Default value – click the fx button
             o   Add this in for the Formula:
                    concat(userName(), " registration for event number ", Meeting)
                   Note: copy and paste will not work on this formula. You will have to delete the “Meeting” string in the formula
                   and use the “Insert Field or Group” button instead and choose the Meeting field.
     
  • Add a formatting rule – “Hide this control” to both
    o   the Title
    o   and MeetingID fields 
         Note: You should also delete the label for these fields and move them to the bottom of the form
         and delete the empty table rows they were in. This will make these fields invisible to the end user,
         but they will still be there to bind to the SharePoint list
  • In the Username field of the form
    o   Right-click – Text Box Properties
    o   Default value – click the fx button
    o   Add this in for the Formula: userName() 
  • Add a formatting rule to the Username field to “Disable this control
  • In the Meeting field of the form
    o   Click the “Default Value” button in the Control Tools (Steuerungstools) – Properties tab of the ribbon
    o   “Default value/Standardwert” – click the fx button
    o   Add this in for the Formula using the “Insert Field or Group” button: MeetingID
  • Add a formatting rule to the Meeting field to “Disable this control
  • Publish the form
** Notiz: ich habe hier noch einen Button "Absenden" reingetan

Create a QueryString for UnRegister List

Use the same steps you did for Attendees list and apply the steps to the UnRegister list…

  • Go to the UnRegister list on the SharePoint site
  • Right-Click on the “Add new item” link and choose to open in a new window or a new tab
  • Now you will be on the edit form page – click Site ActionsEdit Page
  • Add a (WebPart) “Query String (URL) / Filter aus Abfragezeichenfolge (URL)” (in Category “Filter”) field to the site
  • Modify the Settings and add
    o   Fiter Name – QueryString
    o   Query String Parameter Name – meeting_id
  • Connect the Query String (URL) Filter Web Part to the InfoPath Form Web Part
    o   Use the “MeetingID” filed as the Consumer Field Name

Now when anyone comes to the new form of your Attendees list, it will be filtered by the QueryString on the MeetingID field. The InfoPath form is setup to use the MeetingID text field to populate the Meeting dropdown box. This allows us to automatically pick the dropdown of the event the attendee wishes to register from.

DoubleCheck - keine doppelte registrierung

Nachtrag: Für den Doublecheck (User und Meeting) und damit keine Doppelregistrierung stattfinden, muss ein weiteres Script eingefügt werden. Dies macht, dass der „Anmelden“ Link unsichtbar wird falls sich der Benutzer schon angemeldet hat, dafür wird der Abmelden Link sichtbar.
Wenn keine identische Anmeldung gefunden wurde wird demnach der "Anmelden" Link gezeigt und der "Abmelden Link" unsichtbar.Ansonsten wird der Abmelden Button unsichtbar und dafür der Anmelden Button angezeigt.

Ich habe ein zweites Script Editor WebPart zwischen Calendar und Register/UnRegister Script Editor WebPart genommen..... aber es sollte schon in einem funktionieren. Das schaue ich an sobald alles sauber läuft.

// ****************** Kopiere Script von hier weg…   *******************

<script src="/Style%20Library/scripts/jquery-2.2.2.min.js" type="text/javascript"></script>

<script type="text/javascript">

 

 //The following script will be used to query two lists, compare the ID and UserName for duplicate registration

 

 $function doublecheckUserAndEvent() {

 

 // obere zeile auskommentieren und die folgende reinnehmen wenn man beides im selben Script Editor WebPart laufen hat. Ausserdem zu unterst.....

 // die Zeile....     _spBodyOnLoadFunctionNames.push('doublecheckUserAndEvent');  auskommentieren

 // $(function() {

 

 //Get current Calendar list item ID to be used in a function

 var vars = [], hash;

 

 var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');  

 

  for(var i = 0; i < hashes.length; i++){    

 

    hash = hashes[i].split('=');

 

    vars.push(hash[0]);

 

    vars[hash[0]] = hash[1];

  }

 

  var calendarId = vars["ID"].toString();

 

  // ====== TestVAR CalID    alert(calendarId); 

 

 

//***********************************************************************************

 

//Global Variables used to get list items

 

   var listName = "Attendees"; //list name of attendees

 

   var url = _spPageContextInfo.webAbsoluteUrl; //grabs the current SP site

 

   var userid = _spPageContextInfo.userId; //grabs the current user ID 

 

//Set global variable to current user via a function call

 

   var myJsonObj3 = getCurrentUser(userid, url); //set variable to a return data when function is called

 

   var LoginName = myJsonObj3.d.LoginName;

 

//Set global variable to attendees list via a function call

 

   var myJsonObj = getListItems(listName, url); //set variable to a return data when function is called

 

 

   var myAttendeesList = myJsonObj.d.results;

 

 

//***********************************************************************************

//Function to get the items from a list with an ID and username, then return a JSON data set

 

function getListItems(listName, siteurl, success, failure) {

 

   return JSON.parse($.ajax({

 

       url: siteurl + "/_api/web/lists/getbytitle('" + listName + "')/items?$filter=(MeetingID eq " + calendarId + ") and (Username eq '" + encodeURIComponent(LoginName) + "')",

       method: "GET",

 

       global: false,

 

       async:false,

 

       headers: { "Accept": "application/json; odata=verbose" },

 

       success: function (data) {

 

           return (data);

 

       },

 

       error: function (data) {

 

           failure(data);

 

       }

 

   }).responseText);

 

}

 

//***********************************************************************************

//Function to get the current user from SP

 

function getCurrentUser(userid, siteurl, success, failure) {

 

   return JSON.parse($.ajax({

 

       url: siteurl + "/_api/web/getuserbyid(" + userid + ")",

 

       method: "GET",

 

       global: false,

 

       async:false,

 

       headers: { "Accept": "application/json; odata=verbose" },

 

       success: function (data) {

 

           return (data);

 

       },

 

       error: function (data) {

 

           failure(data);

 

       }

 

   }).responseText);

 

}

 

 

 

//***********************************************************************************

//Checking for duplicate registration for current user

 

 

 

if (myAttendeesList.length > 0) {

 

  for (var i = 0; i < myAttendeesList.length; i++) {

 

     if (myAttendeesList[i].Username == LoginName) {

 

       alert(LoginName + ' ist für diesen Event bereits angemeldet');

       // alert(myAttendeesList[i].LoginName + ' ist für diesen Event bereits angemeldet');

 

       $("a[name$='SPBookmark_Register']").closest("tr").hide();

 

     }

 

  }

 

} else {

  alert(LoginName + " ist NICHT für diesen Event angemeldet.");

  $("a[name$='SPBookmark_UnRegister']").closest("tr").hide();

 

 }

 

});

 

 // "Subscribe to the SharePoint "page load"

    _spBodyOnLoadFunctionNames.push('doublecheckUserAndEvent');

 

</script>

// ****************** Kopiere Script bis hier   ******************* 

Troubleshooting

Wenn beim Testen (Klick auf den An- bzw. Abmelden Link geklickt wird, erscheint ein Fehler im ModalWindow.

Das deutet auf eine falsche List-ID hin im Script code.

 

Lösung: Es muss im Script für das „Umwandeln der Textbox in einen Hyperlink“ dringend zuerst die Listen ID kontrolliert und im Code ggf. damit ersetzt werden und zwar bei OpenLandLRegistration() und bei OpenLandURegistration().

Beispielzeile:

url:" /org/ict/Lists/Attendees/Item/newifs.aspx?List=049cef2a%2D3c13%2D4a6d%2Da98d%2D16a27adfd6e8&meeting_id=" + meeting_id,

Die ID krieg man wenn die Liste Attendees bzw. UnRegister geöffnet wird und dann Ansicht ändern angeklickt wird. Nun wird die URL angepasst und die ID kann herauskopiert werden.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 8 Dez. 2016 10:50
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Boah, ich meinte eigentlich nicht, daß Du die ganze Lösung posten sollst. Aber danke, vielleicht hilft es jemandem.

Ich wollte nur wissen, mit welcher Technologie Du denn jetzt was genau erreichen möchtest, also z.B. so: "ich möchte mit JavaScript ein Listenelement löschen". Gibt es denn jetzt noch irgendwo ein Problem?

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
159 Beiträge
thunderstorm Als Antwort am 8 Dez. 2016 11:12
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

:-))

Es funktioniert fast alles, ausser dass das List Item aus der Liste "Attendees" gelöscht wird (welches beim Abmelden in die Liste "Unregister" geschrieben wurde). Ich weiss nicht was besser funktioniert. von mir aus auch mit dem Javascript "function OpenLandURegistration(meeting_id)", wenn man das machen kann. Oder auch WF ergänzen.

Ich denke das müsste dann der UnRegister-WF sein oder? Aber eben, wie kann ich ....

den Eintrag den ich in UnRegister List geschrieben habe, aus der Attendees-Liste löschen?

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 8 Dez. 2016 11:44
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Also sorry, aber ich weigere mich weiterhin den ganzen Beitrag oben durchzuarbeiten. Dazu habe ich nicht die Zeit. Wenn Du nicht konkreter beschreiben kannst, was Du wie erreichen möchtest, ist es sehr schwer hier zu helfen. In dem Fall solltest Du vielleicht jemanden (kostenpflichtig) engagieren...

Soweit ich es sehe, könnte ein Workflow auf der Unregister-Liste automatisch starten und das korrespondierende Element in der anderen Liste löschen. Ich frage mich aber, wozu es die Unregister-Liste braucht. Normalerweise erzeugt man keinen Datensatz, wenn man doch eigentlich einen entfernen will.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
159 Beiträge
thunderstorm Als Antwort am 15 Dez. 2016 07:47
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Der Vollständigkeithalber.....

Problem gelöst!

Es war schwierig weil sowohl ein User mehrmals in der Liste vorkommen kann, als auch Meetings. Deshalb habe ich mich für folgenden Weg entschieden.

Ich musste in "Attendees" und auch in "Unrgegister" eine weitere "berechnete" Spalte erstellen wo ich beide Werte (MeetingID und Username) zusammen reinschreibe:

Name:            MeetingIDUsername
Formel:           =MeetingID&";"&Username
Feldtyp:          Text

Nun musste ich nur noch im "UnRegistering Workflow" das List Element in "Attendees" löschen wo dieses "MeetingIDUsername" Feld gleich ist wie im aktuellen ListItem (UnRegister) reingeschrieben wird....
Neue Action hinzufügen
Element in Attemdees löschen:
List:                            Attendees
Field:                          MeetingIDUsername
Value:  (fx Button)...   Current Item:MeetingIDUsername
Deployen - fertig

Das war es im wesentlichen.