Sco*_*cus 5 sharepoint sharepoint-designer sharepoint-workflow sharepoint-online
我的设置:
使用案例:
我有一个SP2013工作流程,允许用户对库中的文档进行更改请求.工作流具有启动表单参数,为这些参数提供的数据以及对运行工作流的项目的引用将写入站点中的另一个列表.这一切都很好.
我要做的是在文档库中创建一个列,允许用户直接导航到工作流的Initiation Form,而不必右键单击该项,选择"Advanced",然后选择"Workflows".
工作流程的"启动表单"页面的链接(在手动导航到它时直接从浏览器的地址栏中取出)的链接如下所示(为了便于阅读,添加了换行符):
https://company.sharepoint.com/sites/ABC/wfsvc/e73969f753574a3bb30c8d3ce3ab9c56/WFInitForm.aspx
?List={f9b73015-1131-442d-95b8-9682149a27e6}
&ID=5
&ItemGuid={71AA92CE-2D37-4D43-B593-AB6004E9DCF0}
&TemplateID={64193686-AB59-4D44-B0EB-FBD8E2CB7A1F}
&WF4=1
&Source=https%3A%2F%2Fcompany%2Esharepoint%2Ecom%2Fsites%2FABC%2FCourseDocuments%2FForms%2FCourseDocuments%2Easpx%3FRootFolder%3D%252Fsites%252FDCU%252FCourseDocuments%252FBasic%2520Stuff%26FolderCTID%3D0x0120D52000E334520C326BA440BF6F86F3CA80AE2800E3DBD1BD3A1EA348A9D944A931464C4D
Run Code Online (Sandbox Code Playgroud)
的ID和ItemGuid链接的部分将需要动态,因为它们将包含对特定的库文件,所述工作流将需要对运行的参考.其他一切都是静态的.
为了每个项目动态生成此URL,我创建了第二个工作流程,该工作流程在添加库中的新项目时运行,并且能够手动运行(对于库中已有的项目)并且工作流程正确生成每个项目所需的URL.
问题:
此URL超过"超链接或图片"列接受的255个字符,因此在尝试将此URL写入列时工作流出错.
我试过的:
我已经在这一段时间了,发现了几个已发布的解决方法,其中没有一个有效:
我已经将"计算"列设置为"日期/时间"结果,并使计算成为URL部分到HTML超链接语法(即="<a
href='"&[column1]&[column2]&[column3]&"'>Click</a>")的串联.虽然这确实成功地将整个事物生成并设置到库中,并且所有动态部分都正确,但该字段不会呈现为已解析的HTML,而是呈现完整的HTML标记,因此它不是可点击的链接.(下图显示了一个相对URL,但是使用这种方法,我使用了一个绝对URL.图片只是为了显示正在生成和未解析的标记的结果.)
因此,最重要的是我可以创建所需的URL,但无法找到一种方法将其放入每个项目的字段中,使其可以作为实际超链接进行单击.
更新:
为了回应下面的@LukášNešpor建议,我尝试了相应的变化,但按照您的指示再次尝试.我没有在列表本身中获得列格式化选项,但是在配置列表设置中的列时我确实得到了该选项,这就是我输入JSON的位置.
但是,当我尝试它时,JSON格式不起作用.
您可以利用列格式。它可以在现代列表中使用来更改列(字段)的呈现方式。一种可能的用途是呈现具有当前项目的属性的链接。几乎所有字段都可以引用,包括ID,但遗憾的是 GUID 不能。
要解决 GUID 字段(无代码)的问题,您可以在列表中创建文本列并将其命名为例如Log Change Request。然后创建简单的工作流程并将这个新创建的列设置为当前项目的 GUID。不要忘记将工作流程设置为在创建新项目时运行。
然后转到列表(使用现代经验)并设置列格式。
右侧的窗格将打开。将以下 JSON 粘贴到字段并保存更改。
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/column-formatting.schema.json",
"elmType": "a",
"txtContent": "Link",
"attributes": {
"href": {
"operator": "+",
"operands": [
"https://company.sharepoint.com/sites/ABC/wfsvc/e73969f753574a3bb30c8d3ce3ab9c56/WFInitForm.aspx",
"?List={f9b73015-1131-442d-95b8-9682149a27e6}",
"&ID=",
"[$ID]",
"&ItemGuid=",
"@currentField",
"&TemplateID={64193686-AB59-4D44-B0EB-FBD8E2CB7A1F}",
"&WF4=1",
"&Source=https%3A%2F%2Fcompany%2Esharepoint%2Ecom%2Fsites%2FABC%2FCourseDocuments%2FForms%2FCourseDocuments%2Easpx%3FRootFolder%3D%252Fsites%252FDCU%252FCourseDocuments%252FBasic%2520Stuff%26FolderCTID%3D0x0120D52000E334520C326BA440BF6F86F3CA80AE2800E3DBD1BD3A1EA348A9D944A931464C4D"
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
创建项目,当工作流程完成时,该列应包含您需要的链接。
对于经典(遗留)视图可以使用客户端渲染。它的作用与新体验中的列格式相同。
创建文本列并将其命名为例如Log Change Request。下一步是创建 Javascript 文件,将其上传到 SharePoint(某处),并将此 javascript 作为 JSLink 注册到该列。
1)创建Javascript文件并调用它,例如log-change-request.js
// CSR-override for MDS enabled site
RegisterModuleInit("~site/SiteAssets/log-change-request.js", RegisterLink);
// CSR-override for MDS disabled site
RegisterLink();
function RegisterLink() {
var field = {};
field.Templates = {};
field.Templates.Fields = {
"LogChangeRequest": {
"View": fieldTemplate
}
};
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(field);
}
function fieldTemplate(context) {
var item = context.CurrentItem;
return "<a href='"
+ "https://company.sharepoint.com/sites/ABC/wfsvc/e73969f753574a3bb30c8d3ce3ab9c56/WFInitForm.aspx"
+ "?List={f9b73015-1131-442d-95b8-9682149a27e6}"
+ "&ID=" + item.ID
+ "&ItemGuid=" + item.UniqueId
+ "&TemplateID={64193686-AB59-4D44-B0EB-FBD8E2CB7A1F}"
+ "&WF4=1"
+ "&Source=https%3A%2F%2Fcompany%2Esharepoint%2Ecom%2Fsites%2FABC%2FCourseDocuments%2FForms%2FCourseDocuments%2Easpx%3FRootFolder%3D%252Fsites%252FDCU%252FCourseDocuments%252FBasic%2520Stuff%26FolderCTID%3D0x0120D52000E334520C326BA440BF6F86F3CA80AE2800E3DBD1BD3A1EA348A9D944A931464C4D"
+ "'>"
+ "Link"
+ "</a>";
}
Run Code Online (Sandbox Code Playgroud)
2) 将此文件上传到您在其中创建列的网站集的网站资产Log Change Request。注意:此文件可以放置在任何位置,只需更改其中的路径即可。
3) 下载安装SharePoint Online 客户端组件 SDK。它将复制使用 PowerShell 连接到 SharePoint 所需的一些 DLL。
4) 运行下面的 PowerShell 脚本,该脚本会将JSLink列的属性设置为 Javascript 文件的路径。
.NET CSOM解决方案如何设置列
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client")
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime")
function Set-JSLink() {
Param(
[string]$SiteUrl,
[string]$ListTitle,
[string]$ColumnTitle,
[string]$JSLinkUrl
)
$creds = Get-Credential
$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteUrl)
$ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($creds.UserName, $creds.Password)
$list = $ctx.Web.Lists.GetByTitle($ListTitle)
$ctx.Load($list)
$ctx.ExecuteQuery()
$column = $list.Fields.GetByTitle($ColumnTitle)
$column.JSLink = $JSLinkUrl
# Make it read only so it is not visible in new or edit form
$column.ReadOnlyField = $true
$column.Update()
$ctx.ExecuteQuery()
$ctx.Dispose()
}
# Example:
Set-JSLink -SiteUrl "https://tenant.sharepoint.com/sites/ABC" -ListTitle "Document Sets" -ColumnTitle "Log Change Request" -JSLinkUrl "~site/SiteAssets/log-change-request.js"
Run Code Online (Sandbox Code Playgroud)
JSOM解决方案如何设置列
使用这种方法不需要安装任何SDK。只需将此 HTML 代码放入脚本编辑器即可。
<form>
<input type="text" id="listTitle" placeholder="List title" /><br />
<input type="text" id="columnTitle" placeholder="Column title" /><br />
<input type="text" id="jsLink" placeholder="JSLink Url" /><br />
<button onclick="setColumn(); return false;">Configure column</button>
</form>
<script type="text/javascript">
'use strict';
SP.SOD.executeFunc("sp.js")
function setColumn() {
var listTitle = document.getElementById("listTitle").value;
var columnTitle = document.getElementById("columnTitle").value;
var jsLink = document.getElementById("jsLink").value;
var cc = new SP.ClientContext()
var list = cc.get_web().get_lists().getByTitle(listTitle);
cc.load(list);
cc.executeQueryAsync(
function () {
var column = list.get_fields().getByTitle(columnTitle);
column.set_jsLink(jsLink);
column.set_readOnlyField(true);
column.update();
cc.executeQueryAsync(
function () {
alert("Column sucessfuly configured");
},
function (sender, args) {
console.error(args.get_message());
}
);
},
function (sender, args) {
console.error(args.get_message());
}
);
cc.dispose();
}
</script>
Run Code Online (Sandbox Code Playgroud)
5)打开一些文档集,添加文档,该列应包含您需要的链接。
笔记:
由于文档集视图仅适用于经典体验,因此设置中的设置(新体验或经典体验)并不重要。
| 归档时间: |
|
| 查看次数: |
1060 次 |
| 最近记录: |