Frage

All -

Ich bin mit WSS 3.0. Derzeit wird HR einen Mitarbeiter unternehmensinternen Lebenslauf in eine Dokumentbibliothek auf unserer Website hochladen, aber aus Datenschutzgründen müssen wir dann Zugang zu diesem Dokument Bibliothek beschränken, die Benutzer zwingt, dann HR durchläuft jedes Mal, wenn sie wollen, ihren Lebenslauf zu aktualisieren.

Mein Gedanke ist, eine Liste zu erstellen mit Anhängen ermöglicht, dass Benutzer nur Ansicht erlaubt / ihre eigenen Produkte bearbeiten, und dann die Erlaubnis gibt HR alle Einträge zu verwalten. Dies funktioniert mit der Ausnahme, dass HR benötigen, um das erste Liste Element zu erstellen und den Lebenslauf anhängen, die das Listenelement bedeutet, dass „durch {h} erstellt“ wird und nicht sichtbar / bearbeitbar durch die Endbenutzer, dessen Lebenslauf angebracht ist.

Alle Ideen, wie kann ich entweder die Möglichkeit, HR die „erstellt von“ Feld beim Upload zu ändern, so dass Benutzer Ende sehen und ihren Lebenslauf bearbeiten können, oder über diesen in einer anderen Art und Weise gehen?

Danke!

War es hilfreich?

Lösung

Erstellen Sie eine Dokumentbibliothek den Lebenslauf des halten. Dann geben Sie die Personalabteilung (Sharepoint-Benutzergruppe) „Lesen / Schreiben alle“ Berechtigungen für die Bibliothek, geben die alle anderen lesen / schreiben Sie Ihre eigenen“Rechte. Erstellen Sie ein Inhaltstyp namens‚Fortsetzen‘auf der Grundlage der Out-of-the Inhaltstyp Box-Dokument. Dann fügen Sie ein Feld, das die Mitarbeiter (SPUser Feld) enthält, den die Lebenslauf Bedenken den Inhaltstyp (und alle anderen Felder erforderlich, dh Name, Adresse etc.). diese HR Füllung richtig haben, wenn die listitem Erstellen (machen die Felder erforderlich).

Dann schreiben einen itemeventreceiver an den Inhaltstyp gebunden Sie nur die ItemUpdated Ereignis erstellt und außer Kraft setzen.

Der Code wäre in etwa wie folgt:

public override void ItemUpdated(SPItemEventProperties properties)
{
  SPSecurity.RunWithElevatedPrivileges(delegate
  {
    using (SPWeb web = properties.OpenWeb())
    {
       web.AllowUnsafeUpdates = true; 
       var item = web.Lists[properties.ListId].GetItemById(properties.ListItemId);
       if (item != null)
       {
         if (item.Fields.ContainsField("Employee"))
         {
           item["Author"] = item["Employee"]; 
           // Author is the internal name of the Created by field, 
           // always use Internal Names!
           DisableEventFiring();
           item.SystemUpdate();
           EnableEventFiring();
         }
       }
     }
   });
}

Sie können die ItemEventReceiver binden, um einen FeatureReceiver an den Inhaltstyp mit etwa so:

SPContentType docCt = web.ContentTypes[new SPContentTypeId("CONTENTYPE ID GOES HERE")];
docCt.EventReceivers.Add(SPEventReceiverType.ItemUpdated, "ASSEMBLYNAME, Version=1.0.0.0, Culture=neutral, PublicKeyToken=TOKEN", "FULLY QUALIFIED CLASSNAME");
docCt.Update();

Andere Tipps

Warum nicht nur eine Dokumentbibliothek für die Bewerbungen verwenden? (Statt einer Liste w / Attachments). Sie können HR volle Lese- geben / schreiben auf alle Dokumente innerhalb, und der Besitzer des Lebenslauf haben Berechtigungen dazu beitragen, nur ihre eigenen Lebenslauf.

fand ich einen Weg, um die Erstellt von Feld mithilfe von Sharepoint Designer ändern, um einen Workflow erstellen.

  1. Erstellen Sie ein Dummy-Feld in der Liste mit einem einfach zu erkennenden Namen, z.B. XYZZY. Machen Sie es eine „Person oder Gruppe“ ein.
  2. In Sharepoint Designer, Workflow für Ihre Liste erstellen. Lassen Sie den manuellen Start und startet automatisch, wenn neue Element erstellt wird.
  3. Aktionen -> Set-Feld in Current Item -.> Set XYZZY auf das Feld in der Liste, die das Benutzerkonto Sie einfügen wollen enthält Erstellt von
  4. Klicken Sie auf Fertig stellen
  5. Öffnen Sie nun Ihren Workflow .xoml Datei mit Notepad. Ersetzen Sie „XYZZY“ mit „Autor“. Speichern Sie die Datei .xoml.
  6. , um den Workflow in Designer öffnen. Klicken Sie auf Fertig stellen, so dass sie mit dem neuen Code wieder aufbereitet.
  7. Löschen Sie das Dummy-Feld aus der Liste.
  8. Führen Sie den Workflow für jedes vorhandene Element in Ihrer Liste. Neue Produkte werden selbst zu korrigieren automatisch.

Mit einem benutzerdefinierten Upload-Bildschirm können Sie den Kontext des aktuellen Benutzers ändern, bevor der Upload zu tun. Es erfordert Nachschlagen die Benutzertoken so etwas wie die folgenden verwenden (diese sind Code-Schnipsel mit Fehlerbehandlung zu arbeiten und anderen Sachen entfernt). Beachten Sie, dass EnsureUser wird verlangen, dass der aktuelle Benutzer im Grunde ein Admin / Eigentümer sein.

using (SPSite site = GetImpersonatedSite(runAsUser))
{
    using (SPWeb web = site.OpenWeb())
    {
        // Do stuff here
    }
}

private SPSite GetImpersonatedSite(string username)
{
    user = SPContext.Current.Web.EnsureUser(username);
    SPSite site = new SPSite(SPContext.Current.Web.Url, user.UserToken);
    return site;
}

hatte ich eine ähnliche Situation (Migration in Sharepoint), wo ich eine Datei mit dem Admin-Benutzer auf ein Dokument Bibliothek hinzufügen musste und dann „Ändern“ die Benutzer. Ich habe es so, könnten Sie etwas helfen:

using (var root = site.RootWeb)
 {
   var users = root.SiteUsers;
   var user = users["domain\username"];
   file.Item[SPBuiltInFieldId.Created_x0020_By] = user.ID;
   file.Item[SPBuiltInFieldId.Modified_x0020_By] = user.ID;
   file.Item.UpdateOverwriteVersion();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top