使用欄位格式化來自定義SharePoint(八)

Justin-Liu發表於2018-10-15

部落格地址:http://blog.csdn.net/FoxDave

Expressions
txtContent的值、樣式屬性和屬性(attribute)屬性可以以表示式的形式展示,它們會在執行時根據當前欄位或列表項的上下文被解析。表示式物件可以巢狀其他表示式物件。

Excel-style表示式
所有的Excel樣式表示式都以=開始。
簡單的條件表示式會在@me不等於[$Author.email]時返回none,否則返回‘’:

=if(@me != [$Author.email], 'none', '')

再複雜一些的if/else條件表示式如下:

=if([$Sentiment] <= 0.3, 'sp-field-severity--blocked', if([$Sentiment] < 0.9,'sp-field-severity--warning','sp-field-severity--good'))

非條件的一元或二元操作可以像下面這樣寫:

=[$foo] * -7
=sin(@currentField)
=toString(60 + (sin(6.2831853 * @currentField) * 60))

抽象語法樹表示式
下面的例子包含一個表示式物件,執行表示式(@currentField > 40) ? '100%' : (((@currentField * 2.5).toString() + '%')

{
   "$schema": "https://developer.microsoft.com/json-schemas/sp/column-formatting.schema.json",
   "operator": "?",
   "operands": [
      {
         "operator": ">",
         "operands": [
            "@currentField",
            "40"
         ]
      },
      "100%",
      {
         "operator": "+",
         "operands": [
            {
               "operator": "toString()",
               "operands": [
                  {
                     "operator": "*",
                     "operands": [
                        "@currentField",
                        2.5
                     ]
                  }
               ]
            },
            "%"
         ]
      }
   ]
}

操作符(Operators)
操作符指定要執行的操作,可用的操作符如下:

  • /
  • <
  • ==
  • !=
  • <=
  • =

  • ||
  • &&
  • toString()
  • Number()
  • Date()
  • cos
  • sin
  • ?
  • toLocaleString()
  • toLocaleDateString()
  • toLocaleTimeString()

Binary operators - 標準二元運算子,需要兩個運算域:

  • /
  • <
  • <=
  • =

Unary operators - 標準的一元運算子:

  • toString()
  • Number()
  • Date()
  • cos
  • sin
  • toLocaleString()
  • toLocaleDateString()
  • toLocaleTimeString()

Conditional operator - 條件運算子:?

運算域
指定表示式的引數或運算域。通常是條件表示式或基本值的陣列。

特殊字串值
txtContent的值、樣式和屬性可以是字串或表示式物件。一些特殊的字串可以用於從列表的欄位或使用者上下文中獲取值。

“@currentField”
會轉換為當前欄位的值。
一些欄位型別表示為物件型別。從物件中輸出值需要指定物件中的特定屬性。例如,如果當前欄位是一個使用者/組型別,指定@currentField.title來獲取使用者的顯示名,即在列表檢視中顯示的名稱。下面會列舉一些物件型別的欄位以及它們的屬性。

注意:@currentField.title預設返回一個人的顯示名。但是如果使用者欄位的展示欄位被調整了,它就可能改變了title屬性的值。例如,一個使用者欄位將顯示欄位配置為了部門,那麼我們從title取到的就是該使用者的部門了。

使用者欄位

{
   "id": "122",
   "title": "Kalya Tucker",
   "email": "kaylat@contoso.com",
   "sip": "kaylat@contoso.com",
   "picture": "https://contoso.sharepoint.com/kaylat_contoso_com_MThumb.jpg?t=63576928822"
}

日期/時間欄位
日期/時間欄位的值可以通過不同的方式獲取,基於我們想要讓日期以什麼格式顯示。以下三個方法支援將日期轉換位指定的格式:

  • toLocaleString() - 顯示完整的日期時間。
  • toLocaleDateString() - 只顯示日期。
  • toLocaleTimeString() - 只顯示時間。

例如,下面的JSON會顯示當前欄位(假設是日期欄位)的完整日期時間。

{
   "$schema": "https://developer.microsoft.com/json-schemas/sp/column-formatting.schema.json",
   "elmType": "div",
   "txtContent": {
        "operator": "toLocaleString()",
        "operands" : ["@currentField"]
    }
}

查閱項欄位

{
   "lookupId": "100",
   "lookupValue": "North America",
}

下面的例子展示瞭如何使用查閱項欄位。

{
   "$schema": "https://developer.microsoft.com/json-schemas/sp/column-formatting.schema.json",
   "elmType": "a",
   "txtContent": "@currentField.lookupValue",
   "attributes": {
      "href": {
         "operator": "+",
         "operands": [
            "https://contoso.sharepoint.com/teams/Discovery/Lists/Regions/DispForm.aspx?ID=",
            "@currentField.lookupId"
         ]
      },
      "target": "_blank"
   }
}

超連結欄位

{
   "desc": "SharePoint Patterns and Practices",
}

如要引用URL的值,使用@currentField。
下面的例子展示瞭如何使用超連結欄位。

{
   "$schema": "https://developer.microsoft.com/json-schemas/sp/column-formatting.schema.json",
   "elmType": "a",
   "txtContent": "@currentField.desc",
   "attributes": {
      "href": "@currentField",
      "target": "_blank"
   }
}

**"[FieldName]&quot;使(internalname)使[FieldName]&quot;** 該欄位會在整個行的上下文中格式化。我們可以使用該上下文通過指定內部名稱(internal name)去引用該行其他欄位的值,使用符號[InternalName]。例如,使用欄位的內部名稱MarchSales獲取欄位的值,使用[MarchSales]SalesLeadTitle使[MarchSales]。 如果欄位值是一個物件,則可以訪問物件的屬性。例如,訪問名為SalesLead欄位的Title屬性,使用[SalesLead.title]。

“@me”
該值會轉為當前登入使用者的郵箱地址。
該欄位可以用來顯示當前使用者的郵件地址,但更多的是用在條件判斷上。下面是一個為使用者欄位設定顏色的例子,如果當前使用者跟使用者欄位一樣則標記為紅色,反之為藍色。

{
   "$schema": "https://developer.microsoft.com/json-schemas/sp/column-formatting.schema.json",
   "elmType": "div",
   "txtContent": "@currentField.title",
   "style": {
      "color": {
         "operator": "?",
         "operands": [
            {
               "operator": "==",
               "operands": [
                  "@me",
                  "@currentField.email"
               ]
            },
            "red",
            "blue"
         ]
      }
   }
}

“@now”
該值會轉為當前日期和時間。

“@window.innerHeight”
該值會轉為在列表渲染完後等於瀏覽器視窗高度(畫素表示)的數值。

“@window.innerWidth“
該值會轉為在列表渲染完後等於瀏覽器視窗寬度(畫素表示)的數值。

相關文章