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.




einen Hyperlink (Link to Document) programmatisch anlegen

Dieser Beitrag hat 4 Antworten

Ohne Rang
54 Beiträge
Remei erstellt 5 Feb. 2013 14:17
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Sehr geehrte Forenleser und Forenleserinnen,

ich möchte programmatisch "Link to Document" in eine DokumentBibliothek einpsielen. Der Inhaltstyp ist angelegt: "Link to Document". Wenn ich aber über die SPFileCollection jetzt den Hyperlink / Verweis hinzufügen möchte, erfolgt die Fehlermeldung:

Dies ist kein relativer Pfad und die Liste wird nicht gefunden.

Bei Dateien arbeitet er mit den selben reklativen Pfad und spielt diese ein.

Wie mache ich es richtig den Verweis programmatisch zu importieren?

public static bool importVerweis(SPSite verbindung) {
            SPWeb web = null; //web / teamsite
            SPList dokumentBibliothek = null; //anzusprechende DokumentBibliothek
            SPFieldUrlValue temp = null; //Link-Klasse
            SPFile hyperlink = null; //Item
            DateTime datum = new DateTime(); //Datum von der Erstellung
            bool erstellt = false;
            SPTemplateFileType contenttype = new SPTemplateFileType();

            try
            {
                web = verbindung.OpenWeb();
            }
            catch (SPException fehler)
            {
                Console.WriteLine("die Verbindung ist fehlgeschlagen! " + fehler.Message);
            }

            try
            {
                dokumentBibliothek = web.Lists["ILF"];
            }
            catch (SPException fehler)
            {
                Console.WriteLine("BibliothekEingabe nicht gefunden! " + fehler.Message);
            }

            if (dokumentBibliothek != null)
            {
                //Hyperlink import
                temp = new SPFieldUrlValue();
                temp.Description = "irgendein Link";
                temp.Url = "http://dl.cdn.chip.de/downloads/32066/Forenliste.doc?1360056812-1360064312-5ad73a-B-8ccae5a20c6c4b44cc5818b200dc8a7a";
               
                //hinzufügen in der DokumentBibliothek
                try
                {
                    try
                    {
                        hyperlink = web.Files.Add(dokumentBibliothek.RootFolder.ServerRelativeUrl + "/anweisungen.pdf", contenttype);
                    }
                    catch (System.ArgumentException fehler)
                    {
                        Console.WriteLine("Fehler: " + fehler.Message);
                    }
                    //hyperlink[SPBuiltInFieldId.URL] = temp;
                    //hyperlink["Title"] = "hyperlink";
                    //hyperlink["Created"] = datum.Date;
                    //hyperlink["Modified"] = datum.Date;
                    //hyperlink["Created By"] = "System";
                    hyperlink.Update();
                }
                catch (SPException fehler)
                {
                    Console.WriteLine("Fehler beim Erstellen der Datei: " + fehler.Message);
                }
            }
            if (web != null) web.Dispose();
            return erstellt;
        }

 

Dies war ein Beispiel-Code von Microsoft und wirft gleich die Exception: "Mach es mit der SPFileCollection":

 

SPFieldUrlValue class

SharePoint 2013

Other Versions

This topic has not yet been rated - Rate this topic

Represents the value for an SPFieldUrl object.

Inheritance hierarchy

 

System.Object

  Microsoft.SharePoint.SPFieldUrlValue

Namespace:  Microsoft.SharePoint

Assembly:  Microsoft.SharePoint (in Microsoft.SharePoint.dll)

Syntax

 

C#

VB

[SerializableAttribute]
[ClientCallableTypeAttribute(Name =
"FieldUrlValue", ValueObject = true, ServerTypeId = "{FA8B44AF-7B43-43f2-904A-BD319497011E}")]
[SubsetCallableTypeAttribute]
public class SPFieldUrlValue

Examples

 

The following example is a console application that demonstrates how an SPFieldUrlValue object can be used to get and set field values. The application searches the Links list for an item that contains a particular Url. If the list does not have a link to that Url, the application adds one.

C#

VB

using System;
using Microsoft.SharePoint;

namespace ConsoleApp
{
   
class Program
    {
       
static void Main(string[] args)
        {
           
using (SPSite site = new SPSite("http://localhost"))
            {
               
using (SPWeb web = site.OpenWeb("test"))
                {
                   
// Get the Links list or create it if it does not exist.
                    SPList list = web.Lists.TryGetList(
"Links");

if (list == null || list.BaseTemplate != SPListTemplateType.Links)
                    {
                       
// Create the list.
                        Guid listId = web.Lists.Add(
"Links", "A list of interesting Web pages.", SPListTemplateType.Links);
                        list = web.Lists.GetList(listId,
false);
                    }

// Create a link field value.
                    SPFieldUrlValue msdnValue =
new SPFieldUrlValue();
                    msdnValue.Description =
"SharePoint Developer Center";
                    msdnValue.Url =
"http://msdn.microsoft.com/sharepoint";

// Print the field value.
                    Console.WriteLine(msdnValue);
                   
                   
// Check if the list already has this link.
                    SPListItem msdnItem =
null;
                   
foreach (SPListItem item in list.Items)
                    {
                        Object rawValue = item[SPBuiltInFieldId.URL];
                        SPFieldUrlValue typedValue =
new SPFieldUrlValue(rawValue.ToString());
                       
if (typedValue.Url == msdnValue.Url)
                        {
                            msdnItem = item;
                            Console.WriteLine(
"Existing link.");
                           
continue;
                        }
                    }

// If it does not...
                   
if (msdnItem == null)
                    {
                       
// Create a new list item and set the URL field value.
                        msdnItem = list.Items.Add();
                        msdnItem[SPBuiltInFieldId.URL] = msdnValue;
                        msdnItem.Update();

Console.WriteLine("Link added.");
                    }
                }
            }
            Console.Write(
"\nPress ENTER to continue....");
            Console.ReadLine();
        }
    }
}

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 19 Feb. 2013 08:30
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Du darfst in diesem Fall keine Datei, also kein SPFile, anlegen, sondern einfach nur ein SPListItem in der Bibliothek. Und Du mußt dessen Inhaltstyp richtig setzen. Ungefähr so:

SPListItem item = list.AddItem();
item[SPBuiltInFieldId.ContentTypeId] = SPBuiltInContentTypeId.LinkToDocument;
item.Update();
// jetzt die restlichen Felder füllen und nochmal ein Update()

[quote user="Remei"]Dies war ein Beispiel-Code von Microsoft [/quote]

Leider stimmt auch nicht alles was Microsoft da so veröffentlich :-(

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
54 Beiträge
Remei Als Antwort am 19 Feb. 2013 10:04
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Andi,

das SPListItem hatte ich versucht. Der Code war deinem sehr ähnlich, aber sowohl Visual Studio 2010 Ultimate als auch Visual Studio 2012 Express for Desktop werfen den Fehler "Nutzen Sie SPFile". Das macht mich stutzig, weil ich viele solcher Coding-Samples sehe, aber viele Leute darunter auf solchen Blogs schreiben: Das geht nicht.

Würdest du mich bitte aufklären?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 19 Feb. 2013 10:18
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich hätte es vielleicht doch vorher ausprobieren sollen... Das hier funktioniert aber: http://howtosharepoint.blogspot.de/2010/05/programmatically-add-link-to-document.html

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
54 Beiträge
Remei Als Antwort am 19 Feb. 2013 13:36
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Danke Andi,

das half soweit. Der Code kann noch verändert werden um die SPBuiltInField oder SPBuiltInContentTypeId.

 

Eine Merkwürdigkeit hat der SharePoint 2013 noch: Er reagiert sensitiv auf die Erweiterung. ASPX oder HTML lösen den Hyperlink zum Dokument. aus. Bei anderem geschieht gar nichts, außer Webformaten.