رابط JS:تقديم FileLeafRef مع العنوان في مكتبة المستندات

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/97692

  •  10-12-2019
  •  | 
  •  

سؤال

JSLink هو أعظم شيء منذ شرائح الخبز.لا.
هناك بعض المشكلات الغريبة المتعلقة بالأشياء القياسية ولست متأكدًا مما إذا كانت هذه قيودًا أم أنني أفعل شيئًا خاطئًا.

أريد أن يكون عنوان المستند كارتباط قابل للنقر، وليس اسم الملف.وهذا أكثر جمالا بالنظر إلى أسماء الملفات مثل AB2929329.pdf وعنوان أرباح جوي.

عرض قائمة مكتبة المستندات وJSLink يجعل هذا الأمر سهلاً للغاية:

(function () { 
    var overrideNameField = {}; 
    overrideNameField.Templates = {}; 
    overrideNameField.Templates.Fields = {
        "Title": { "View": overrideNameFieldTemplate } 
    }; 

    SPClientTemplates.TemplateManager.RegisterTemplateOverrides(overrideNameField); 
})(); 

function overrideNameFieldTemplate(ctx) { 

    var title = ctx.CurrentItem.Title; 
    var fileRef = ctx.CurrentItem["FileRef"];
    var fileLeafRef = ctx.CurrentItem["FileLeafRef"];

    if (title) {
        return "<a href='"+ fileRef + "'>"+ title + "</a>"; 
    }
    else {
        return "<a href='"+ fileRef + "'>"+ fileLeafRef + "</a>"; 
    }
} 

كان ذلك سهلاً، أليس كذلك؟يتم الآن عرض حقل العنوان دائمًا كرابط - إذا لم يتم تعيين العنوان، فسيتم أخذ FileLeafRef الافتراضي.يعمل هذا طالما أن لديك حقل FileLeafRef أيضًا في طريقة العرض أو الرمز (الرمز جيد).


أنا طماع.لا أريد فقط أن يكون العنوان هو الرابط للمستند، بل أريد أيضًا أن تحتوي القائمة (...) على معاينة للملف عند النقر فوقه عبر Office Web Apps.تمامًا كما يعرض FileLeafRef:"اسم الملف ..." ولديك كافة الإجراءات على "...".

لذا، كل ما علي فعله هو الاستبدال "Title": { "View": overrideNameFieldTemplate } مع "LinkFilename": { "View": overrideNameFieldTemplate } في الكود أعلاه.بوم أنه يعمل!ولكن هنا يأتي الركل:

إنه يعمل فقط عندما يكون لدي Title الحقل في عرض قائمتي.عندما أقوم بإزالة الحقل ctx.CurrentItem.Title باطل.عندما أقوم بإضافة الحقل مرة أخرى إلى طريقة العرض فهو موجود.

كيف يمكنني الحصول على عنوان مستند قابل للنقر عليه بالإضافة إلى قائمة المستندات (...)؟ أرغب في استخدام JSLink، ولكن لا أمانع في استخدام XSLT على الرغم من أنه أصبح من المستحيل الإنشاء باستخدام التغييرات في SharePoint Designer 2013.

هل كانت مفيدة؟

المحلول

للحصول على وظيفة الارتباط بالعنصر باستخدام القائمة في حقل آخر غير الاسم (عنوان القوائم)، يمكنك تعديل CAML في برنامج Designer.أضف ما يلي إلى الحقل الموجود في <ViewFields> عنصر: ListItemMenu='TRUE'.على سبيل المثال، حقل العنوان الخاص بك سيكون مثل:

<FieldRef Name='Title' ListItemMenu='TRUE' />

كما لاحظت، هناك CalloutMenu السمة التي ستوفر معاينة المستند.

نصائح أخرى

لقد فعلت ذلك بطريقة أخرى، وذلك باستخدام JSLink بشكل صارم.لقد قمت بإخفاء حقل العنوان بشكل أساسي حتى لا يظهر.لقد فعلت ذلك عن طريق تجاوز header.هذا ما لدي ويجب أن أبدأ به:

(function () {
//   Initialize the variables for overrides objects
var overrideCtx = {};
overrideCtx.Templates = {'Header': RenderTemplateWithHiddenTitleColumn};
overrideCtx.Templates.Fields = {
    'Title': { 'View': function () { return null;} },
    'LinkFilename': {
        'View': function (renderCtx) {
            if (renderCtx != null && renderCtx.CurrentFieldValue != null)
                return renderCtx.CurrentFieldValue.toString();
            return '<a href="' + ctx.CurrentItem.FileRef + '">' + renderCtx.CurrentItem.Title + '</a>';
        }
    }
};

function RenderTemplateWithHiddenTitleColumn(renderCtx, fRenderHeaderColumnNames) {
   if (renderCtx.BaseViewID == "Callout") {
       return CalloutRenderHeaderTemplate(renderCtx);
   }
   var listSchema = renderCtx.ListSchema;
    var listData = renderCtx.ListData;
    var ret = [];

    if (fRenderHeaderColumnNames == null) {
        fRenderHeaderColumnNames = true;
    }
    ret.push(RenderTableHeader(renderCtx));
    ret.push('<thead id="');
    ret.push("js-listviewthead-" + renderCtx.wpq);
    ret.push('"><tr valign="top" class="ms-viewheadertr');
    if (fRightToLeft)
        ret.push(' ms-vhrtl');
    else
        ret.push(' ms-vhltr');
    ret.push('">');
    if (listSchema.TabularView != undefined && listSchema.TabularView == "1") {
        ret.push('<th class="ms-headerCellStyleIcon ms-vh-icon ms-vh-selectAllIcon" scope="col">');
        RenderSelectAllCbx(renderCtx, ret);
        ret.push('</th>');
    }
    if (fRenderHeaderColumnNames) {
        var fields = listSchema ? listSchema.Field : null;
        var counter = 1;

        for (var f in fields) {
            var field = fields[f];
            if (field.Name == "Title") {
                ret.push("<th></th>");
                break;
            };
            if (field.DisplayName == null)
                continue;
            if (field.GroupField != null)
                break;
            field.counter = counter++;
            ret.push(spMgr.RenderHeader(renderCtx, field));
            if (IsCSRReadOnlyTabularView(renderCtx) && (field.CalloutMenu == "TRUE" || field.listItemMenu == "TRUE"))
                ret.push("<th></th>");
        }
    }
    if (listSchema.TabularView == "1" && renderCtx.BasePermissions.ManageLists && renderCtx.ListTemplateType != 160) {
        ret.push('<th class="ms-vh-icon" scope="col" title=""><span class="ms-addcolumn-span"> </span></th>');
    }
    ret.push("</tr>");
    ret.push("</thead>");
    return ret.join('');
};

SPClientTemplates.TemplateManager.RegisterTemplateOverrides(overrideCtx);
})();

اضطررت إلى القيام ببعض الحلول، لا شيء كبير جدًا.واجهت مشكلات مع قائمة وسائل الشرح عند تجاوز الرأس، لذلك قمت ببساطة باستدعاء وظيفة CalloutRenderHeaderTemplate الافتراضية إذا كان BaseViewID هو وسيلة شرح

if (renderCtx.BaseViewID == "Callout") {
   return CalloutRenderHeaderTemplate(renderCtx);

}

في الحلقة عند عرض الأعمدة، هربت ببساطة عندما ظهر حقل العنوان:

if (field.Name == "Title") {
            ret.push("<th></th>");
            break;
};

حتى الآن يعمل بشكل جيد ولم ألاحظ أي مشاكل.أتمنى أن يساعدك هذا!

لأنني بدأت بهذا السؤال كنقطة مرجعية، أردت فقط الارتباط بالحل الذي توصلت إليه في حالة أنه يساعد أي شخص آخر يحاول القيام بنفس الشيء.

لا تقم بتطبيق تجاوز المسؤولية الاجتماعية للشركات في وضع QuickEdit

لقد قمت بالبناء على طريقة JSLink ولكن واجهت بعض المشكلات عند التبديل من الوضع العادي إلى الوضع QuickEdit.

لقد تمكنت الآن من تجاوز أجزاء الرأس والنص التي تخفي عمود العنوان أثناء المرور عبر وظائف العرض الافتراضية عند التبديل إلى Quickedit.

نأمل أن يكون البرنامج النصي مفيدًا جنبًا إلى جنب مع الإجابات الموجودة في هذه الصفحة لأي شخص يواجه نفس المشكلة :-)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى sharepoint.stackexchange
scroll top