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.




Attachments File in der Ansicht anzeigen

Geprüfte Antwort Dieser Beitrag hat 6 Antworten

Ohne Rang
86 Beiträge
MMAY erstellt 14 Juli 2015 16:51
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Mein gewünschtes Ziel wäre es, den Namen des Anhangs einer Liste in der Ansicht anzeigen zu lassen.

Optiomal wäre es, dass sich der Anhang mit Klick auf den Namen direkt öffnen lässt.

Soweit gibt es einiges was google ausspuckt, aber nichts was funktioniert hat (SP 2013, enterprise).

Ich bin soweit, die Ansicht per xsl anpassen zu können. Ich habe schon einiges an Kombinationen ausprobiert aber es funktioniert noch nicht. Übersehe ich etwas?

 

<xsl:template name="FieldRef_Attachments_body.Attachments" ddwrt:dvt_mode="body" match="FieldRef[@Name='Attachments']" mode="Attachments_body" ddwrt:ghost="hide">

    <xsl:param name="thisNode" select="."/>

      <xsl:if test="not ($thisNode/@Attachments='0')">

        <xsl:value-of select="$thisNode/@Attachments"/>

          </xsl:if>

  </xsl:template>

Entscheidend ist die fettgedruckte Zeile. In dem Fall gibt er mir in der Ansicht eine 1 aus, wenn ein Anhang vorhanden ist. Nichts, wenn kein Anhang vorhanden ist.
Folgende IDs habe ich schon ausprobiert:
@AttachmentsField
@Attachments
@idAttachmentsTable 
@idAttachmentsRow
@AttachmentsTable 
@AttachmentsRow
....

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 14 Juli 2015 17:00
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Du brauchst dazu sowas:

<SharePoint:FormField runat="server" id="AttachmentsField" ControlMode="Display" FieldName="Attachments" __designer:bind=""/>

Füge das anstelle des fetten Texts ein. Das <xsl:if> drumrum kannst Du dann auch weglassen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
86 Beiträge
MMAY Als Antwort am 14 Juli 2015 17:36
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das hat leider nicht geklappt.

 

The ID 'AttachmentsField' is already used by another control.
Habe nach AttachmentsField auch gesucht, allerdings nur einmal im Code gefunden (genau an der Stelle wo ich es nun eingefügt habe).
Eine Idee? :-(
Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 15 Juli 2015 07:54
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Gib dem Teil einfach eine andere ID. Die ist im Grunde völlig egal, muß nur eindeutig sein.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
86 Beiträge
MMAY Als Antwort am 15 Juli 2015 09:17
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

The ID 'AttachmentsField2' is already used by another control.

 

Habe ausprobiert, die Meldung erscheint nur (auch mit ID AttachmentsField) wenn man das xsl:if entfernt.

Wenn ich es drin lasse, stört ihn die angeblich doppelte ID nicht, aber er zeigt den Anhang leider auch nicht an.


Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 15 Juli 2015 09:36
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Sorry, aber ich habe erst jetzt geblickt, daß es Dir um eine Listenansicht geht. Ich dachte aus irgendeinem Grund, Du hättest eine benutzerdefinierte DispForm.

Hier wird ja das Control für jede Zeile gerendert und bekommt dadurch in jeder Zeile dieselbe ID (was nicht erlaubt ist). Du mußt also die ID irgendwie dynamisieren, z.B. durch Anhängen der Element-ID. Das hier habe ich auf die Schnelle dazu gefunden: http://amitphule.blogspot.in/2012/04/display-item-attachments-in-sharepoint.html

Nur der Vollständigkeit halber hier noch wie man es mit CSR / JSLink machen würde (funktioniert hier nicht, weil die Ansicht serverseitig gerendert wird): https://social.technet.microsoft.com/Forums/en-US/74dac191-5a9e-4970-a9f6-a501846f0bef/forum-faq-show-attachments-in-sharepoint-2013-custom-list-view?forum=sharepointgeneral

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
86 Beiträge
MMAY Als Antwort am 15 Juli 2015 16:29
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Vielen lieben Dank Andi, du hast mich auf die entscheidende Spur gebracht.

Ich kann zwar nicht genau 100%ig sagen warum die folgende Lösung funktioniert, aber das geht, und das reicht mir.
Nachfolgend was ich dokumentiert habe bei uns, falls noch Jemand dieses Problem haben sollte. (Der Code der Vollständigkeithalber, falls die Quelle mal nicht verfügbar sein sollte.)

 

 

Wichtig: Die Ansicht muss auf ServerRender=False und ClientRender=True stehen und auch so bleiben!

In der View muss folgende Zeile gesucht werden:
<asp:content contentplaceholderid="PlaceHolderAdditionalPageHead" runat="server">

 

Genau in der Zeile dadrunter wird folgender Code platziert:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">   </script>

<script type="text/javascript">

(function () {

 

    // Create object that have the context information about the field that we want to change it output render 

 

    var attachmentsFiledContext = {};

 

    attachmentsFiledContext.Templates = {};

 

    attachmentsFiledContext.Templates.Fields = {

        

        "Attachments": { "View": AttachmentsFiledTemplate }

    };

 

    SPClientTemplates.TemplateManager.RegisterTemplateOverrides(attachmentsFiledContext);

 

})();

 

 

// This function provides the rendering logic for list view

function AttachmentsFiledTemplate(ctx) {

    var itemId = ctx.CurrentItem.ID;

    var listName = ctx.ListTitle;      

    return getAttachments(listName, itemId);

}

 

//get attachments field properties

function getAttachments(listName,itemId) {

 

    var url = _spPageContextInfo.webAbsoluteUrl;

    var requestUri = url + "/_api/web/lists/getbytitle('" + listName + "')/items(" + itemId + ")/AttachmentFiles";

    var str = "";

    // execute AJAX request

    $.ajax({

        url: requestUri,

        type: "GET",

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

        async: false,

        success: function (data) {

            for (var i = 0; i < data.d.results.length; i++) {

                str += "<a href='" + data.d.results[i].ServerRelativeUrl + "'>" + data.d.results[i].FileName + "</a>";

                if (i != data.d.results.length - 1) {

                    str += "<br/>";

                }                

            }         

        },

        error: function (err) {

            //alert(err);

        }

    });

    return str;

}(function () {

 

    // Create object that have the context information about the field that we want to change it output render 

 

    var attachmentsFiledContext = {};

 

    attachmentsFiledContext.Templates = {};

 

    attachmentsFiledContext.Templates.Fields = {

        

        "Attachments": { "View": AttachmentsFiledTemplate }

    };

 

    SPClientTemplates.TemplateManager.RegisterTemplateOverrides(attachmentsFiledContext);

 

})();

 

 

// This function provides the rendering logic for list view

function AttachmentsFiledTemplate(ctx) {

    var itemId = ctx.CurrentItem.ID;

    var listName = ctx.ListTitle;      

    return getAttachments(listName, itemId);

}

 

//get attachments field properties

function getAttachments(listName,itemId) {

 

    var url = _spPageContextInfo.webAbsoluteUrl;

    var requestUri = url + "/_api/web/lists/getbytitle('" + listName + "')/items(" + itemId + ")/AttachmentFiles";

    var str = "";

    // execute AJAX request

    $.ajax({

        url: requestUri,

        type: "GET",

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

        async: false,

        success: function (data) {

            for (var i = 0; i < data.d.results.length; i++) {

                str += "<a href='" + data.d.results[i].ServerRelativeUrl + "'>" + data.d.results[i].FileName + "</a>";

                if (i != data.d.results.length - 1) {

                    str += "<br/>";

                }               

            }         

        },

        error: function (err) {

            //alert(err);

        }

    });

    return str;

}

</script>

 

Danach erscheinen die Namen der Anhänge in der View und können dort auch direkt mit Klick geöffnet werden.