Exemplo n.º 1
0
        //Methode: Decodieren der Anlagen und Speichern in Bibliothek "Temp" im entsprechenden Unterordner
        public void AnlagenHochladen(XPathNodeIterator anlagen, string xanhang, string xweitergabe, XmlNamespaceManager nsmgr, string DocID, SPFolder tempfolder, string tempuploadurl, SPWeb web)
        {
            Helper helper = new Helper();

            //"Moven" durch jede Zeiler der wiederholten Tabelle der Anlagen mit MoveNext
            while (anlagen.MoveNext())
            {
                //Verwenden von "try" und "catch", da der Code im "try"-Block fehlschlägt und das ganze Programm abbricht, wenn KEINE Anlagen vorhanden sind. Durch try - und catch wird nicht abgebrochen.
                try
                {
                    //Dekodieren des Anlagenfelds. Durch anlagen.current.selectsinglenode wird nicht die ganze Zeile, sondern nur das Feld in der Zeile zum Dekodieren ausgewählt.
                    //Das ist wichtig, da noch das Boolean-Feld zur Weitergabe in jeder Zeile enthalten ist und das Dekodieren mit diesem Feld nicht möglich ist.
                    InfoPathAttachmentDecoder decoder = new InfoPathAttachmentDecoder(anlagen.Current.SelectSingleNode(xanhang, nsmgr).Value);
                    string  fileNamewithoutextension  = Path.GetFileNameWithoutExtension(decoder.Filename);
                    Boolean weitergabe = anlagen.Current.SelectSingleNode(xweitergabe, nsmgr).ValueAsBoolean;
                    Boolean portfolio  = helper.PDFPortfolio(decoder.DecodedAttachment, fileNamewithoutextension, weitergabe, tempfolder, tempuploadurl, DocID);
                    if (portfolio != true)
                    {
                        //Hochladen in /Temp/<Auftragsnummer>
                        SPFile     attachmentuploadfile = tempfolder.Files.Add(tempuploadurl + DocID + "_" + decoder.Filename, decoder.DecodedAttachment, true);
                        SPListItem attachmentitem       = attachmentuploadfile.Item;
                        attachmentitem["Weitergabe"] = weitergabe;
                        //Updaten des Elements damit Änderungen übernommen werden. SystemUpdate() ist eine "silent"-Änderung (dh. Änderungsdatum und Editor werden nicht erfasst). Wenn nur "Update()" verwendet wird, werden diese erfasst.
                        attachmentitem.SystemUpdate();
                    }
                }
                catch { }
            }
        }
Exemplo n.º 2
0
 //Methode: Die Methode wird aufgerufen, wenn im Formular enthaltene Anlagen zur Weitergabe markiert wurden. Im Hauptprogramm wird überprüft,
 //ob das Formularfeld "WeitergabeÄnderung" auf WAHR gesetzt ist. Wenn das der Fall ist, wird KEIN neuer Auftragszettel erstellt, sondern nur diese Methode ausgeführt.
 //Erklärung: Wenn die VW bestimmte Anlagen zur Weitergabe auswählt, ist die Unterschrift des PL schon vorhanden. Durch die Auswahl der Anlagen, wird das Formular geändert,
 //was dazu führt, dass dieser Event Receiver ausgelöst wird (durch das Event "Item updated"). Da in diesem Fall genau derselbe Code ausgeführt werden würde,
 //wie wenn ein neuer Auftrag erstellt worden wäre, würde der Auftragszettel neu erstellt und überschrieben werden. Somit würden alle Signaturen gelöscht werden.
 //Deswegen muss bei Änderung des Formulars geprüft werden, ob es sich um eine inhaltliche Änderung des Auftrags handelt, oder ob "nur" Anlagen zur Weitergabe markiert wurden.
 public void AttachmentsToSupplier()
 {
     xIteratorAttachments = root.Select(xAttachments, nsmgr);
     //"attachments" ist die wiederholte Tabelle mit den Anlagen. Mit "MoveNext()" wird jede Zeile einzelnt bearbeitet.
     while (xIteratorAttachments.MoveNext())
     {
         try
         {
             //Prüfen, ob das Feld in dem die Anlage "liegt" auch wirklich etwas beinhaltet
             if (xIteratorAttachments.Current.SelectSingleNode(xAttachment, nsmgr).Value != null)
             {
                 InfoPathAttachmentDecoder decoder = new InfoPathAttachmentDecoder(xIteratorAttachments.Current.SelectSingleNode(xAttachment, nsmgr).Value);
                 //Laden des Dateinamens der Anlage OHNE die Dateiendung.
                 //Warum? Wenn Word-Dokumente als Anlagen hochgeladen werden, werden diese zu PDF konviertiert. Dadurch ändert sich die Dateiendung. Darum muss "dateiendungs-übergreifend" gearbeitet werden.
                 string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(decoder.Filename);
                 //SPQuery ist eine Abfrage; anhand dieser können Elemente in Listen und Bibliotheken in Sharepoint gefunden werden
                 SPQuery query = new SPQuery();
                 //Abfrage wird auf rekursiv gestllt, damit sie auch Unterordner erfasst
                 query.ViewAttributes = "Scope=\"Recursive\"";
                 //Eigentlicher Abfrage-String: Es wird abgefragt, ob ein Element vorhanden ist, wessen Dateiname ('FileLeafRef') dem aktuellen Dateiname (fileNamewithoutextension) enthält.
                 //'FileLeafRef' ist ein SharePoint-spezifischer-Name, der den Dateinamen MIT Dateiendung enthält; da wir nur nach Dateiname OHNE Dateiendung abfragen können, wird "Contains" verwendet.
                 query.Query = "<Where><Contains><FieldRef Name='FileLeafRef'/><Value Type='Text'>" + fileNameWithoutExtension + "</Value></Contains></Where>";
                 //Angabe des Unterordners in Bibliothek Temp (/temp/<Auftragsnummer>), um die Abfrage nur auf die Anlagen des betroffenen Auftrags auszuführen
                 query.Folder = tempFolder;
                 //Mit diesem Befehl wird die zuvor erstellte Abfrage ausgeführt und das Ergebnis, nämlich alle zutreffenden Elemente, in "collListItems" abgespeichert.
                 //SPListItemCollection ist eine Sammlung von SharePoint-Listenelementen, die später mit foreach weiterverarbeitet werden kann.
                 SPListItemCollection collListItems = libraryTemp.GetItems(query);
                 foreach (SPListItem oListItem in collListItems)
                 {
                     //Überprüfen ob aktuell ausgewählte Anlage zur Weitergabe markiert ist
                     if (xIteratorAttachments.Current.SelectSingleNode(xAttachmentsToSupplier, nsmgr).ValueAsBoolean == true)
                     {
                         //Setzen des Werts der Spalte "Weitergabe" der entsprechenden Datei in Bibliothek "Temp" auf "true"
                         oListItem[collumnTempToSupplier] = true;
                     }
                     else
                     {
                         oListItem[collumnTempToSupplier] = false;
                     }
                     //Updaten des Elements damit Änderungen übernommen werden. SystemUpdate() ist eine "silent"-Änderung (dh. Änderungsdatum und Editor werden nicht erfasst). Wenn nur "Update()" verwendet wird, werden diese erfasst.
                     oListItem.SystemUpdate();
                 }
             }
         }
         catch { }
     }
 }
Exemplo n.º 3
0
 //Methode: Decodieren der Anlagen und Speichern in Bibliothek "Temp" im entsprechenden Unterordner
 public void UploadAttachments()
 {
     xIteratorAttachments = root.Select(xAttachments, nsmgr);
     //"Moven" durch jede Zeiler der wiederholten Tabelle der Anlagen mit MoveNext
     while (xIteratorAttachments.MoveNext())
     {
         //Verwenden von "try" und "catch", da der Code im "try"-Block fehlschlägt und das ganze Programm abbricht, wenn KEINE Anlagen vorhanden sind. Durch try - und catch wird nicht abgebrochen.
         try
         {
             //Dekodieren des Anlagenfelds. Durch anlagen.current.selectsinglenode wird nicht die ganze Zeile, sondern nur das Feld in der Zeile zum Dekodieren ausgewählt.
             //Das ist wichtig, da noch das Boolean-Feld zur Weitergabe in jeder Zeile enthalten ist und das Dekodieren mit diesem Feld nicht möglich ist.
             InfoPathAttachmentDecoder decoder = new InfoPathAttachmentDecoder(xIteratorAttachments.Current.SelectSingleNode(xAttachment, nsmgr).Value);
             //Hochladen in /Temp/<Auftragsnummer>
             SPFile attachmentUploadFile = tempFolder.Files.Add(tempUploadUrl + decoder.Filename, decoder.DecodedAttachment, true);
         }
         catch { }
     }
 }