json 用于VSCode的Velocity Snippets。

用于VSCode的Velocity Snippets。

Velocity.json
{
  "Get Item By Id": {
    "prefix": "GetItem",
    "body": [
      "{",
      "    \"version\": \"2017-02-28\",",
      "    \"operation\": \"GetItem\",",
      "    \"key\": {",
      "        \"id\": \\$util.dynamodb.toDynamoDBJson(\\$ctx.args.id),",
      "    }",
      "}"
    ],
    "description": "Get Item By Id"
  },
  "List Items": {
    "prefix": "Scan",
    "body": [
      "{",
      "    \"version\" : \"2017-02-28\",",
      "    \"operation\" : \"Scan\",",
      "    ## Add 'limit' and 'nextToken' arguments to this field in your schema to implement pagination. **",
      "    ## \"limit\": \\$util.defaultIfNull(\\${ctx.args.limit}, 20),",
      "    ## \"nextToken\": \\$util.toJson(\\$util.defaultIfNullOrBlank(\\$ctx.args.nextToken, null))",
      "}"
    ],
    "description": "List Items"
  },
  "Put Item": {
    "prefix": "PutItem",
    "body": [
      "{",
      "    \"version\" : \"2017-02-28\",",
      "    \"operation\" : \"PutItem\",",
      "    \"key\" : {",
      "        ## If object \"id\" should come from GraphQL arguments, change to \\$util.dynamodb.toDynamoDBJson(\\$ctx.args.id)",
      "        \"id\": \\$util.dynamodb.toDynamoDBJson(\\$util.autoId()),",
      "    },",
      "    \"attributeValues\" : \\$util.dynamodb.toMapValuesJson(\\$ctx.args)",
      "}"
    ],
    "description": "Put Item"
  },
  "Put Item With S3": {
    "prefix": "PutItem+S3",
    "body": [
      "{",
      "    \"version\" : \"2017-02-28\",",
      "    \"operation\" : \"PutItem\",",
      "    \"key\" : {",
      "        \"id\" : { \"S\" : \"\\${util.autoId()}\" }",
      "    },",
      "    #set( \\$attribs = \\$util.dynamodb.toMapValues(\\$ctx.args) )",
      "    #if(\\$util.isNull(\\$ctx.args.file.version))",
      "        #set( \\$attribs.file = \\$util.dynamodb.toS3Object(\\$ctx.args.file.key, \\$ctx.args.file.bucket, \\$ctx.args.file.region))",
      "    #else",
      "        #set( \\$attribs.file = \\$util.dynamodb.toS3Object(\\$ctx.args.file.key, \\$ctx.args.file.bucket, \\$ctx.args.file.region, \\$ctx.args.file.version))",
      "    #end",
      "    \"attributeValues\" : \\$util.toJson(\\$attribs)",
      "}"
    ],
    "description": "Put Item With S3"
  },
  "Delete Item by ID": {
    "prefix": "DeleteItem",
    "body": [
      "{",
      "    \"version\" : \"2017-02-28\",",
      "    \"operation\" : \"DeleteItem\",",
      "    \"key\" : {",
      "        ## If your table's hash key is not named 'id', update it here. **",
      "        \"id\" : { \"S\" : \"\\${ctx.args.id}\" }",
      "        ## If your table has a sort key, add it as an item here. **",
      "    }",
      "}"
    ],
    "description": "Delete Item by ID"
  },
  "Simple Query": {
    "prefix": "Query",
    "body": [
      "{",
      "    \"version\" : \"2017-02-28\",",
      "    \"operation\" : \"Query\",",
      "    \"query\" : {",
      "        ## Provide a query expression. **",
      "        \"expression\": \"id = :id\",",
      "        \"expressionValues\" : {",
      "            \":id\" : \\$util.dynamodb.toDynamoDBJson(\\$ctx.args.id)",
      "        }",
      "    }",
      "}"
    ],
    "description": "Simple Query"
  },
  "Query with greater than expression": {
    "prefix": "Query with > expression",
    "body": [
      "{",
      "    \"version\" : \"2017-02-28\",",
      "    \"operation\" : \"Query\",",
      "    \"query\" : {",
      "        ## Provide a query expression. **",
      "        \"expression\": \"id = :id and createdAt > :createdAt\",",
      "        \"expressionValues\" : {",
      "            \":id\" : {",
      "                \"S\" : \"\\${ctx.args.id}\"",
      "            },",
      "            \":createdAt\": {",
      "                \"S\": \"\\${ctx.args.createdAt}\"",
      "            }",
      "        }",
      "    }",
      "}"
    ],
    "description": "Simple Query with greater than expression"
  },
  "Query with filter on index expression": {
    "prefix": "Query with filter expression",
    "body": [
      "{",
      "    \"version\" : \"2017-02-28\",",
      "    \"operation\" : \"Query\",",
      "    \"index\" : \"name-index\",",
      "    \"query\" : {",
      "        \"expression\": \"#name = :name\",",
      "        \"expressionNames\" : {",
      "        \"#name\" : \"name\"",
      "    },",
      "        \"expressionValues\" : {",
      "            \":name\" : {",
      "                \"S\" : \\$util.dynamodb.toDynamoDBJson(\\$ctx.args.name)",
      "            }",
      "        }",
      "    },",
      "    \"filter\" : {",
      "        \"expression\" : \"contains(#city, :city)\",",
      "        \"expressionNames\" : {",
      "            \"#city\" : \"city\"",
      "        },",
      "        \"expressionValues\" : {",
      "            \":city\" : \\$util.dynamodb.toDynamoDBJson(\\$ctx.args.city)",
      "        }",
      "    }",
      "}"
    ],
    "description": "Query with filter on index expression"
  },
  "Query with contains expression": {
    "prefix": "Query with contains expression",
    "body": [
      "{",
      "    \"version\" : \"2017-02-28\",",
      "    \"operation\" : \"Query\",",
      "    \"query\" : {",
      "        ## Provide a query expression. **",
      "        \"expression\": \"id = :id\",",
      "        \"expressionValues\" : {",
      "            \":id\" : {",
      "                \"S\" : \"\\${ctx.args.id}\"",
      "            }",
      "        }",
      "    },",
      "    \"filter\": {",
      "        \"expression\": \"contains(tags, :tag)\",",
      "        \"expressionValues\" : {",
      "            \":tag\": {",
      "                \"S\": \"\\${ctx.args.tag}\"",
      "            }",
      "        }",
      "    }",
      "}"
    ],
    "description": "Query with contains expression"
  },
  "Query items created today": {
    "prefix": "Query items created today|date",
    "body": [
      "#set( \\$todayString = \\$util.time.nowISO8601().substring(0, 10) )",
      "{",
      "    \"version\" : \"2017-02-28\",",
      "    \"operation\" : \"Query\",",
      "    \"query\" : {",
      "        ## Provide a query expression. **",
      "        \"expression\": \"id = :id and begins_with(createdAt, :today)\",",
      "        \"expressionValues\" : {",
      "            \":id\" : {",
      "                \"S\" : \"\\${ctx.args.id}\"",
      "            },",
      "            \":today\": {",
      "                \"S\": \"\\$todayString\"",
      "            }",
      "        }",
      "    }",
      "}"
    ],
    "description": "Query items created today"
  },
  "Simple Query with pagination": {
    "prefix": "Query with pagination",
    "body": [
      "{",
      "    \"version\" : \"2017-02-28\",",
      "    \"operation\" : \"Query\",",
      "    \"query\" : {",
      "        ## Provide a query expression. **",
      "        \"expression\": \"id = :id\",",
      "        \"expressionValues\" : {",
      "            \":id\" : {",
      "                \"S\" : \"\\${ctx.args.id}\"",
      "            }",
      "        }",
      "    },",
      "    ## Add 'limit' and 'nextToken' arguments to this field in your schema to implement pagination. **",
      "    \"limit\": \\$util.defaultIfNull(\\${ctx.args.limit}, 20),",
      "    \"nextToken\": \\$util.toJson(\\$util.defaultIfNullOrBlank(\\$ctx.args.nextToken, null))",
      "}"
    ],
    "description": "Simple Query with pagination"
  },
  "Batch Get Items": {
    "prefix": "BatchGetItems",
    "body": [
      "#set(\\$ids = [])",
      "#foreach(\\$id in \\${ctx.args.ids})",
      "    #set(\\$map = {})",
      "    \\$util.qr(\\$map.put(\"id\", \\$util.dynamodb.toString(\\$id)))",
      "    \\$util.qr(\\$ids.add(\\$map))",
      "#end",
      "",
      "{",
      "    \"version\" : \"2018-05-29\",",
      "    \"operation\" : \"BatchGetItem\",",
      "    \"tables\" : {",
      "        ## Note: \\${sampleTableName} was defined in substitutions field.",
      "        \"\\${sampleTableName}\": {",
      "            \"keys\": \\$util.toJson(\\$ids),",
      "            \"consistentRead\": true",
      "        }",
      "    }",
      "}"
    ],
    "description": "Batch Get Items"
  },
  "Batch Put Items": {
    "prefix": "BatchPutItems",
    "body": [
      "#set(\\$postsdata = [])",
      "#foreach(\\$item in \\${ctx.args.posts})",
      "    \\$util.qr(\\$postsdata.add(\\$util.dynamodb.toMapValues(\\$item)))",
      "#end",
      "",
      " ## Note: \\${sampleTableName} was defined in substitutions field.",
      "{",
      "    \"version\" : \"2018-05-29\",",
      "    \"operation\" : \"BatchPutItem\",",
      "    \"tables\" : {",
      "        \"\\${sampleTableName}\": \\$utils.toJson(\\$postsdata)",
      "    }",
      "}"
    ],
    "description": "Batch Put Items"
  },
  "Batch Delete Items": {
    "prefix": "BatchDeleteItems",
    "body": [
      "#set(\\$ids = [])",
      "#foreach(\\$id in \\${ctx.args.ids})",
      "    #set(\\$map = {})",
      "    \\$util.qr(\\$map.put(\"id\", \\$util.dynamodb.toString(\\$id)))",
      "    \\$util.qr(\\$ids.add(\\$map))",
      "#end",
      "",
      "## Note: \\${sampleTableName} was defined in substitutions field.",
      "{",
      "    \"version\" : \"2018-05-29\",",
      "    \"operation\" : \"BatchDeleteItem\",",
      "    \"tables\" : {",
      "        \"\\${sampleTableName}\": \\$util.toJson(\\$ids)",
      "    }",
      "}"
    ],
    "description": "Batch Delete Items"
  },
  "Cognito group access": {
    "prefix": "Cognito Group Access Authorization",
    "body": [
      "#set(\\$expression = \"\")",
      "#set(\\$expressionValues = {})",
      "#foreach(\\$group in \\$ctx.identity.claims.get(\"cognito:groups\"))",
      "    #set( \\$expression = \"\\${expression} contains(groupsCanAccess, :var\\$foreach.count )\" )",
      "    #set( \\$val = {})",
      "    #set( \\$test = \\$val.put(\"S\", \\$group))",
      "    #set( \\$values = \\$expressionValues.put(\":var\\$foreach.count\", \\$val))",
      "    #if ( \\$foreach.hasNext )",
      "    #set( \\$expression = \"\\${expression} OR\" )",
      "    #end",
      "#end",
      "{",
      "    \"version\" : \"2017-02-28\",",
      "    \"operation\" : \"Scan\",",
      "    \"filter\":{",
      "        \"expression\": \"\\$expression\",",
      "        \"expressionValues\": \\$utils.toJson(\\$expressionValues)",
      "    }",
      "}"
    ],
    "description": "Cognito group access"
  },
  "Put Item with cognito identity": {
    "prefix": "PutItem with Owner Identity",
    "body": [
      "#set( \\$attributes = \\$util.dynamodb.toMapValues(\\$ctx.args) )",
      "\\$util.qr(\\$attributes.put(\"$Identity\", \\$ctx.identity.cognitoIdentityId))",
      "{",
      "    \"version\" : \"2017-02-28\",",
      "    \"operation\" : \"PutItem\",",
      "    \"key\" : {",
      "        \"id\" : { \"S\" : \"\\${context.args.id}\" }",
      "    },",
      "    \"attributeValues\": \\$util.toJson(\\$attributes)",
      "}"
    ],
    "description": "Put Item with cognito identity"
  },
  "Delete Item with cognito identity": {
    "prefix": "DeleteItem with Owner Identity",
    "body": [
      "{",
      "    \"version\" : \"2017-02-28\",",
      "    \"operation\" : \"DeleteItem\",",
      "    \"key\" : {",
      "        \"id\" : { \"S\" : \"\\${context.args.id}\" }",
      "    },",
      "    \"condition\" : {",
      "        \"expression\"       : \"contains($Owner,:expectedOwner)\",",
      "        \"expressionValues\" : {",
      "            \":expectedOwner\" : { \"S\" : \"\\${context.identity.username}\" }",
      "        }",
      "    }",
      "}"
    ],
    "description": "Delete Item with cognito identity"
  },
  "Put Item offline enabled": {
    "prefix": "PutItem Offline",
    "body": [
      "{",
      "    \"version\" : \"2017-02-28\",",
      "    \"operation\" : \"PutItem\",",
      "    \"key\": {",
      "        \"id\": { \"S\" : \"\\$utils.autoId()\"}",
      "    },",
      "    #set( \\$attribs = \\$util.dynamodb.toMapValues(\\$ctx.args) )",
      "    \\$util.qr(\\$attribs.remove(\"relayState\"))",
      "    #set( \\$attribs.version = { \"N\" : 1 } )",
      "    \"attributeValues\" : \\$util.toJson(\\$attribs)",
      "}"
    ],
    "description": "Put Item offline enabled"
  },
  "Conditional Update with version": {
    "prefix": "UpdateItem with version",
    "body": [
      "{",
      "    \"version\" : \"2017-02-28\",",
      "    \"operation\" : \"UpdateItem\",",
      "    \"key\" : {",
      "        \"id\" : \\$util.dynamodb.toDynamoDBJson(\\$ctx.args.id)",
      "    },",
      "",
      "    ## Set up some space to keep track of things we're updating **",
      "    #set( \\$expNames  = {} )",
      "    #set( \\$expValues = {} )",
      "    #set( \\$expSet = {} )",
      "    #set( \\$expAdd = {} )",
      "    #set( \\$expRemove = [] )",
      "",
      "    ## Increment \"version\" by 1 **",
      "    \\$!{expAdd.put(\"version\", \":one\")}",
      "    \\$!{expValues.put(\":one\", \\$util.dynamodb.toDynamoDB(1))}",
      "",
      "    ## Iterate through each argument, skipping \"id\" and \"expectedVersion\" **",
      "    #foreach( \\$entry in \\$util.map.copyAndRemoveAllKeys(\\$ctx.args, [\"id\",\"expectedVersion\"]).entrySet() )",
      "        #if( \\$util.isNull(\\$entry.value) )",
      "            ## If the argument is set to \"null\", then remove that attribute from the item in DynamoDB **",
      "",
      "            #set( \\$discard = \\${expRemove.add(\"#\\${entry.key}\")} )",
      "            \\$!{expNames.put(\"#\\${entry.key}\", \"\\${entry.key}\")}",
      "        #else",
      "            ## Otherwise set (or update) the attribute on the item in DynamoDB **",
      "",
      "            \\$!{expSet.put(\"#\\${entry.key}\", \":\\${entry.key}\")}",
      "            \\$!{expNames.put(\"#\\${entry.key}\", \"\\${entry.key}\")}",
      "            \\$!{expValues.put(\":\\${entry.key}\", \\$util.dynamodb.toDynamoDB(\\$entry.value))}",
      "        #end",
      "    #end",
      "",
      "    ## Start building the update expression, starting with attributes we're going to SET **",
      "    #set( \\$expression = \"\" )",
      "    #if( !\\${expSet.isEmpty()} )",
      "        #set( \\$expression = \"SET\" )",
      "        #foreach( \\$entry in \\$expSet.entrySet() )",
      "            #set( \\$expression = \"\\${expression} \\${entry.key} = \\${entry.value}\" )",
      "            #if ( \\$foreach.hasNext )",
      "                #set( \\$expression = \"\\${expression},\" )",
      "            #end",
      "        #end",
      "    #end",
      "",
      "    ## Continue building the update expression, adding attributes we're going to ADD **",
      "    #if( !\\${expAdd.isEmpty()} )",
      "        #set( \\$expression = \"\\${expression} ADD\" )",
      "        #foreach( \\$entry in \\$expAdd.entrySet() )",
      "            #set( \\$expression = \"\\${expression} \\${entry.key} \\${entry.value}\" )",
      "            #if ( \\$foreach.hasNext )",
      "                #set( \\$expression = \"\\${expression},\" )",
      "            #end",
      "        #end",
      "    #end",
      "",
      "    ## Continue building the update expression, adding attributes we're going to REMOVE **",
      "    #if( !\\${expRemove.isEmpty()} )",
      "        #set( \\$expression = \"\\${expression} REMOVE\" )",
      "",
      "        #foreach( \\$entry in \\$expRemove )",
      "            #set( \\$expression = \"\\${expression} \\${entry}\" )",
      "            #if ( \\$foreach.hasNext )",
      "                #set( \\$expression = \"\\${expression},\" )",
      "            #end",
      "        #end",
      "    #end",
      "",
      "    ## Finally, write the update expression into the document, along with any expressionNames and expressionValues **",
      "    \"update\" : {",
      "        \"expression\" : \"\\${expression}\",",
      "        #if( !\\${expNames.isEmpty()} )",
      "            \"expressionNames\" : \\$utils.toJson(\\$expNames),",
      "        #end",
      "        #if( !\\${expValues.isEmpty()} )",
      "            \"expressionValues\" : \\$utils.toJson(\\$expValues),",
      "        #end",
      "    },",
      "",
      "    \"condition\" : {",
      "        \"expression\"       : \"version = :expectedVersion\",",
      "        \"expressionValues\" : {",
      "            \":expectedVersion\" : \\$util.dynamodb.toDynamoDBJson(\\$ctx.args.expectedVersion)",
      "        }",
      "    }",
      "}"
    ],
    "description": "Conditional Update with version"
  },
  "Return single item": {
    "prefix": "Return single item",
    "body": [
      "## Pass back the result from DynamoDB. **",
      "\\$util.toJson(\\$ctx.result)"
    ],
    "description": "return single item"
  },
  "Return a list of results": {
    "prefix": "Return list",
    "body": ["\\$util.toJson(\\$ctx.result.items)"],
    "description": "Return a list of results"
  },
  "Return paginated results": {
    "prefix": "Return paginated results",
    "body": [
      "{",
      "    \"items\": \\$util.toJson(\\$ctx.result.items),",
      "    \"nextToken\": \\$util.toJson(\\$util.defaultIfNullOrBlank(\\$context.result.nextToken, null))",
      "}"
    ],
    "description": "Return paginated results"
  },
  "Return batch response": {
    "prefix": "Return Batch Response",
    "body": [
      "## Batch results are available in $context.result.data as name of the table (TABLENAME below)",
      "## Read more: https://docs.aws.amazon.com/appsync/latest/devguide/tutorial-dynamodb-batch.html",
      "",
      "\\$util.toJson(\\$ctx.result.data.${1:TABLENAME})"
    ],
    "description": "Return batch response"
  },
  "Return batch response with error handling": {
    "prefix": "Return Batch Response + Error Handling",
    "body": [
      "## Batch results are available in \\$context.result.data as name of the table (TABLENAME below)",
      "## If there was an error with invocation there may be partial results in \\$ctx.error object",
      "## You can append an error for that field in GraphQL response along with successful data",
      "## Read more: https://docs.aws.amazon.com/appsync/latest/devguide/tutorial-dynamodb-batch.html",
      "",
      "#if(\\$ctx.error)",
      "    \\$utils.appendError(\\$ctx.error.message, \\$ctx.error.message)",
      "#end",
      "\\$utils.toJson(\\$ctx.result.data)"
    ],
    "description": "Return batch response with error handling"
  },
  "Return only my owned records": {
    "prefix": "Return Owner Records",
    "body": [
      "#set(\\$myResults = [])",
      "#foreach(\\$item in \\$ctx.result.items)",
      "    ## For Cognito User Pools use \\$ctx.identity.username instead",
      "    #if(\\$item.Owner == \\$ctx.identity.cognitoIdentityId)",
      "        #set(\\$added = \\$myResults.add(\\$item))",
      "    #end",
      "#end",
      "\\$utils.toJson(\\$myResults)"
    ],
    "description": "Return only own records"
  },
  "Return a single record if public": {
    "prefix": "Return Single Record If Public",
    "body": [
      "#if(\\$ctx.result.public == 'yes')",
      "    \\$utils.toJson(\\$ctx.result)",
      "#else",
      "    \\$utils.unauthorized()",
      "#end"
    ],
    "description": "Return a single record if public"
  },
  "Return record if viewable by my groups": {
    "prefix": "Return Record If Viewable By My Groups",
    "body": [
      "#set(\\$permissions = \\$ctx.result.GroupsCanAccess)",
      "#set(\\$claimPermissions = \\$ctx.identity.claims.get(\"cognito:groups\"))",
      "",
      "#foreach(\\$per in \\$permissions)",
      "    #foreach(\\$cgroups in \\$claimPermissions)",
      "        #if(\\$cgroups == \\$per)",
      "            #set(\\$hasPermission = true)",
      "        #end",
      "    #end",
      "#end",
      "",
      "#if(\\$hasPermission)",
      "    \\$utils.toJson(\\$ctx.result)",
      "#else",
      "    \\$utils.unauthorized()",
      "#end"
    ],
    "description": "Return record if viewable by my groups"
  },
  "Return a list of public records": {
    "prefix": "Return A List Of Public Records",
    "body": [
      "#set(\\$publicRecords = [])",
      "#foreach(\\$item in \\$ctx.result.items)",
      "    #if(\\$item.public == 'yes')",
      "        #set(\\$added = \\$publicRecords.add(\\$item))",
      "    #end",
      "#end",
      "\\$utils.toJson(\\$publicRecords)"
    ],
    "description": "Return a list of public records"
  },
  "Return Offline enabled response": {
    "prefix": "Return Offline Enabled Response",
    "body": [
      "\\$util.qr(\\$context.result.put(\"relayState\", \"\\$context.arguments.relayState\"))",
      "\\$util.toJson(\\$context.result)"
    ],
    "description": "Return Offline enabled response"
  }
}

json LeanSwift演示AR应用程序配置(dev-config.json)版本:7.3.0

LeanSwift DEMO环境AR App配置<br/>版本:7.3.0

dev-config.json
{
  "name": "AccountsReceivable",
  "description": "AccountsReceivableDesc",
  "version": "7.3.0-BUILD20190702",
  "environment": "DEMO",
  "inforIONAPI": {
    "URL": "https://nicaragua.leanswift.com/InforIntSTS",
    "grant_type": "password",
    "username": "infor#TZCF1HLWnLH2SvKU36Hox64ji2cFYBT-8PPFWkXFUxMyyFM0AXEjRLgQAlL7My_mSaHPRrP8W34C_TFT4pbbdw",
    "password": "lLoVh7x70xxnfj3_ZpyNI2-PhKV_H75Z4GAYoCOOlwDznj89AKkjdB-kCl5y3g_vZ4V_FFGzHbWsp2v7-3C9Vg",
    "client_id": "infor~Db3_AEn3yLdfBGSF7fvVDArngEriNXi5GkfmcoG16gU",
    "client_secret": "xxeWt32DIPRJGd3Ap2c1BkVsL20SqhYId7IGLkSOj5siG4qyJjPXtLQ_RGhZeTOPTnCPvqqph39ghjLDuF5mqg",
    "access_token_url": "connect/token"
  },
  "inforIDMAPI": {
    "URL": "https://nicaragua.leanswift.com:7443/infor/IDM/api"
  },
  "inforM3API": {
    "URL": "https://<HostName>:7443/infor/M3/M3/m3api-rest/v2/execute"
  },
  "companyId": "0000000000000001",
  "apiKey": "c60d08c89e35cc9d",
  "defaultLanguage": "en-US",
  "defaultThemeId": "1",
  "defaultTextureId": "1",
  "faviconURL": "img/favicon.png",
  "appLogoURL": "img/accounts-receivable.png",
  "showThemeSelection": "true",
  "showWallpaperSelection": "true",
  "showLanguageSelection": "true",
  "excludeThemes": [],
  "excludeWallpapers": [],
  "excludeLanguages": [],
  "excludeModules": [],
  "appConfig": {
    "searchQuery": {},
    "ticklerNotesByInvoice": true,
    "globalDateFormat": "MM/dd/yy",
    "invoiceIDMEntity1": "OIS199PF",
    "invoiceIDMAttribute1": "M3EXIN",
    "invoiceM3Attribute1": "ESCINO",
    "labelForInvoiceIDM1": "Invoice",
    "enableInvoiceIDM1": true,
    "invoiceIDMEntity2": "ARS169PF",
    "invoiceIDMAttribute2": "M3EXIN",
    "invoiceM3Attribute2": "ESCINO",
    "labelForInvoiceIDM2": "Interest Inv",
    "enableInvoiceIDM2": true,
    "netInvoices": "true",
    "nettingCode": "ARN",
    "displayUserDefinedField0": "true",
    "labelForUserDefinedField0": null,
    "displayUserDefinedField1": "true",
    "labelForUserDefinedField1": null,
    "displayUserDefinedField2": "true",
    "labelForUserDefinedField2": null,
    "displayUserDefinedField3": "true",
    "labelForUserDefinedField3": null,
    "displayUserDefinedField4": "true",
    "labelForUserDefinedField4": null,
    "displayUserDefinedField5": "true",
    "labelForUserDefinedField5": null,
    "displayUserDefinedField6": "true",
    "labelForUserDefinedField6": null,
    "displayUserDefinedField7": "true",
    "labelForUserDefinedField7": null,
    "displayUserDefinedField8": "true",
    "labelForUserDefinedField8": null,
    "displayUserDefinedField9": "true",
    "labelForUserDefinedField9": null,
    "invoiceCheckNumberOffsetFromARInfo": "0",
    "enableM3Authority": false,
    "allowSaveData": true,
    "allowCreditChange": true,
    "allowCreditRelease": true,
    "allowTicklerNotes": true,
    "customerSearchIESQuery": "SearchFields:CUNO;CUNM;PHNO;SMCD;PYNO",
    "useCustomAPIForCreditReleaseCOStop": true,
    "useCustomAPIToRetriveTicklerNotes": true,
    "useCustomAPIToUpdateTicklerNotes": true
  }
}

json Master Halco PROD - AR app配置版本:7.3.0

Master Halco PROD环境AR App配置版本:7.3.0

dev-config.json
{
  "name": "AccountsReceivable",
  "description": "AccountsReceivableDesc",
  "version": "7.3.0-BUILD20190702",
  "environment": "PROD",
  "inforIONAPI": {
    "URL": "https://mhprod.cloud.infor.com/InforIntSTS",
    "grant_type": "password",
    "username": "infor#5KIX-xkwC9TPnI561tR-QTB7TInWW9tQDQq2PCFPzrmt_Yck3fYyEe7HldjaealCP8u-_qR1HVco0qXp42_tyg",
    "password": "RhornadkP35NBP4TCKd0e-ZEjH6IFBE2GEvXFFmfGVoHST0B0adzNQsq8tHm1nNsZhHPd8u-j35p3WhMqK9i4Q",
    "client_id": "infor~08Pg34_0ymHeXWWMOpwLne_1JRLTPzzRGybXs5HodAQ",
    "client_secret": "3q8eFVUtHgyxuIvCJI996EGt8NzP99yyutO6bvw4t5HwzX2093dd2DkKs15cLfz6DIvZ_fV4ri2Ymnn13Yvz9A",
    "access_token_url": "connect/token"
  },
  "inforIDMAPI": {
    "URL": "https://mhprod.cloud.infor.com:7443/infor/IDM/api"
  },
  "inforM3API": {
    "URL": "https://<HostName>:7443/infor/M3/M3/m3api-rest/v2/execute"
  },
  "companyId": "0000000000000137",
  "apiKey": "c60d08c89e35cc9d",
  "defaultLanguage": "en-US",
  "defaultThemeId": "1",
  "defaultTextureId": "1",
  "faviconURL": "img/favicon.png",
  "appLogoURL": "img/accounts-receivable.png",
  "showThemeSelection": "true",
  "showWallpaperSelection": "true",
  "showLanguageSelection": "true",
  "excludeThemes": [],
  "excludeWallpapers": [],
  "excludeLanguages": [],
  "excludeModules": [],
  "appConfig": {
    "searchQuery": {},
    "ticklerNotesByInvoice": true,
    "globalDateFormat": "MM/dd/yy",
    "invoiceIDMEntity1": "OIS199PF",
    "invoiceIDMAttribute1": "M3EXIN",
    "invoiceM3Attribute1": "ESCINO",
    "labelForInvoiceIDM1": "Invoice",
    "enableInvoiceIDM1": true,
    "invoiceIDMEntity2": "ARS169PF",
    "invoiceIDMAttribute2": "M3EXIN",
    "invoiceM3Attribute2": "ESCINO",
    "labelForInvoiceIDM2": "Interest Inv",
    "enableInvoiceIDM2": true,
    "netInvoices": "true",
    "nettingCode": "ARN",
    "displayUserDefinedField0": "true",
    "labelForUserDefinedField0": null,
    "displayUserDefinedField1": "true",
    "labelForUserDefinedField1": null,
    "displayUserDefinedField2": "true",
    "labelForUserDefinedField2": null,
    "displayUserDefinedField3": "true",
    "labelForUserDefinedField3": null,
    "displayUserDefinedField4": "true",
    "labelForUserDefinedField4": null,
    "displayUserDefinedField5": "true",
    "labelForUserDefinedField5": null,
    "displayUserDefinedField6": "true",
    "labelForUserDefinedField6": null,
    "displayUserDefinedField7": "true",
    "labelForUserDefinedField7": null,
    "displayUserDefinedField8": "true",
    "labelForUserDefinedField8": null,
    "displayUserDefinedField9": "true",
    "labelForUserDefinedField9": null,
    "invoiceCheckNumberOffsetFromARInfo": "0",
    "enableM3Authority": false,
    "allowSaveData": true,
    "allowCreditChange": true,
    "allowCreditRelease": true,
    "allowTicklerNotes": true,
    "customerSearchIESQuery": "SearchFields:CUNO;CUNM;PHNO;SMCD;PYNO;CUST",
    "useCustomAPIForCreditReleaseCOStop": true,
    "useCustomAPIToRetriveTicklerNotes": true,
    "useCustomAPIToUpdateTicklerNotes": true
  }
}

json nodemon的VSCode调试设置

launch.json
{
    "version": "0.2.0",
    "configurations": [
    {
        "type": "node",
        "request": "launch",
        "name": "nodemon",
        "runtimeExecutable": "${workspaceFolder}/node_modules/nodemon/bin/nodemon.js",
        "program": "${workspaceFolder}/app.js",
        "restart": true,
        "console": "integratedTerminal",
        "internalConsoleOptions": "neverOpen"
    }]
}

json vscode-个人的一些设置

vscode-个人的一些设置

vscode-.json
{
    "workbench.colorTheme": "One Dark Pro",
    "editor.fontSize": 16,
    "workbench.startupEditor": "newUntitledFile",
    "window.zoomLevel": 0,
    "explorer.confirmDelete": false,
    "git.ignoreMissingGitWarning": true,
    "python.pythonPath": "/Users/mf/PyEnvs/base/bin/python",
    "python.venvPath": "~/PyEnvs",
    "git.enableSmartCommit": true,
    "explorer.confirmDragAndDrop": false,
    "[json]": {
        "editor.defaultFormatter": "HookyQR.beautify"
    },
    "workbench.iconTheme": "vscode-icons-mac",
    "editor.fontFamily": "Fira Code",
    "editor.fontLigatures": true
}

json 个人的vscode的代码片段

个人的vscode的代码片段

vscode-coder.json
{
	"print to info": {
		"prefix": "info",
		"body": [
			"# __author__: Mai feng",
			"# __file_name__: $TM_FILENAME",
			"# __time__: $CURRENT_YEAR:$CURRENT_MONTH:$CURRENT_DATE:$CURRENT_HOUR:$CURRENT_MINUTE",
		],
		"description": "info output to console"
	},
	"print to note": {
		"prefix": "note",
		"body": [
			"'''$1",
			"'''"								 
		],
		"description": "note output to console"
	}
}

json babel,sass,npm-run-all

babel,sass,npm-run-all

package.json
{
  "devDependencies": {
    "babel-cli": "^6.10.1",
    "babel-preset-es2015": "^6.9.0",
    "babel-preset-stage-0": "^6.5.0",
    "node-sass": "^3.8.0",
    "npm-run-all": "^2.2.2"
  },
  "babel": {
    "presets": [
      "es2015",
      "stage-0"
    ]
  },
  "scripts": {
    "dev": "npm-run-all -s sass:build -p babel sass:watch",
    "babel": "babel -w src/js -d dist/js",
    "sass:build": "node-sass src/css -o dist/css",
    "sass:watch": "node-sass -w src/css -o dist/css"
  }
}

json 频道菜单h5帧演示

频道菜单h5帧演示

menu_choice_frame_demo.json
"585":{"appId":"","httpMethod":"GET","uriMenuType":"CORDOVA","code":"BUPM-PHONE-CUSTOMER-POTENTIAL","inactiveTime":"","uri":"/followup/pages/module_newPotentialCustomerBf/index.html?menuCode=BUPM-PHONE-CUSTOMER-POTENTIAL&pMenuCode=BUPM-PHONE-CUSTOMER","id":585,"parentId":275,"description":"我的潜在顾客","name":"我的潜在顾客","noAuthAttr":{},"active":true,"authAttr":{"dealerType":["11","21","22","23","24"]},"attributes":{"toolbarItem":false,"iconUri":"","helpUri":"{\"navigationBar\":1}","ordered":585,"openMode":"normal"},"effectiveTime":"1493019378000","group":false}

json eigoKits

eigoKits

eigoTips.json
{
  "solve": "work through",
  "like": "a fan of/be into",
  "talk about": "talk through",
  "contact": "get hold of",
  "finally": "end up doing",
  "exercise": "work out",
  "discuss": "go through/over",
  "read": "go through/over",
  "refuse": "turn down",
  "support": "go for/get behind",
  "fire": "let...go",
  "get ready": "gear up",
  "agreement": "buy in",
  "accept": "approve of",
  "agree": "approve of",
  "arrange": "get in",
  "I'm fine": "I'm good/great",
  "No.": "I don't think so./I'm good.",
  "currently": "at this point",
  "at that time": "at that point",
  "then": "at that point",
  "at some time": "at some point",
  "seldom": "rarely",
  "so far": "thus far/up to date",
  "in the future": "down the road",
  "from now on": "going/moving forward",
  "related to": "pertaining to",
  "doing": "in the middle of doing",
  "while": "whereas",
  "make sense": "add up",
  "make progress": "get traction",
  "colleagues": "coworker",
  "in summary": "in a nutshell",
  "employees": "workforce",
  "go to": "head to",
  "don't understand": "over my head",
  "under": "underneath",
  "table": "matrix",
  "Excel": "spreadsheet",
  "hope": "promise",
  "I think": "I guess",
  "come up with": "figure out",
  "futhermore": "on top of that",
  "face": "tackle",
  "talk": "speak",
  "method": "approach",
  "way": "approach",
  "go on": "move on",
  "appear like": "come across like",
  "all people": "across the board",
  "That's all": "All right",
  "OK": "sounds good",
  "if so": "if that's the case",
  "your decision": "up to you/your call/at your discretion",
  "discuss with you": "run by you/bounce off you"
}
eigoTipsList.json
[
    {
        "phrase":"solve",
        "synonym":"work through",
        "desc":"We can work through the problem if we have time",
        "type":"10"
    },
    {
        "phrase":"like",
        "synonym":"a fan of/be into",
        "desc":"I'm a fan of pizza",
        "type":"10"
    },
    {
        "phrase":"talk about",
        "synonym":"talk through",
        "desc":"talk through 包含讨论的意思",
        "type":"10"
    },
    {
        "phrase":"contact",
        "synonym":"get hold of",
        "desc":"I couldn't get hold of Mike",
        "type":"10"
    },
    {
        "phrase":"finally",
        "synonym":"end up doing",
        "desc":"He ended up marrying his high school sweetheart",
        "type":"10"
    },
    {
        "phrase":"exercise",
        "synonym":"work out",
        "desc":"I work out twice a week at a gym",
        "type":"10"
    },
    {
        "phrase":"discuss",
        "synonym":"go through/over",
        "desc":"We'll need to go through this issue in the meeting",
        "type":"10"
    },
    {
        "phrase":"read",
        "synonym":"go through/over",
        "desc":"We'll need to go through this issue in the meeting",
        "type":"10"
    },
    {
        "phrase":"refuse",
        "synonym":"turn down",
        "desc":"",
        "type":"10"
    },
    {
        "phrase":"support",
        "synonym":"go for/get behind",
        "desc":"The proposal may succeed if more people get behind it",
        "type":"10"
    },
    {
        "phrase":"fire",
        "synonym":"let...go",
        "desc":"委婉说法",
        "type":"10"
    },
    {
        "phrase":"get ready",
        "synonym":"gear up",
        "desc":"We are geared up for the challenge",
        "type":"10"
    },
    {
        "phrase":"agreement",
        "synonym":"buy in",
        "desc":"通常用法是 get your buy in,就是get your agreement的意思",
        "type":"10"
    },
    {
        "phrase":"accept",
        "synonym":"approve of",
        "desc":"I don't approve of the proposal",
        "type":"10"
    },
    {
        "phrase":"agree",
        "synonym":"approve of",
        "desc":"I don't approve of the proposal",
        "type":"10"
    },
    {
        "phrase":"arrange",
        "synonym":"set up",
        "desc":"安排会议或接待:set up a meeting/set him in the meeting room",
        "type":"10"
    },
    {
        "phrase":"arrive",
        "synonym":"get in",
        "desc":"一般指办公室或家里:When you get in tomorrow morning, please come to my office",
        "type":"10"
    },
    {
        "phrase":"I'm fine",
        "synonym":"I'm good/great",
        "desc":"回答How are you",
        "type":"10"
    },
    {
        "phrase":"No.",
        "synonym":"I don't think so./I'm good./I'm afraid not",
        "desc":"委婉表达No,回答 Do you have any other question?",
        "type":"10"
    },
    {
        "phrase":"here/out",
        "synonym":"in town/out of town",
        "desc":"How long are you in town for?",
        "type":"10"
    },
    {
        "phrase":"currently",
        "synonym":"at this point",
        "desc":"At this point, we are the best ranked football team in the country.",
        "type":"10"
    },
    {
        "phrase":"at that time",
        "synonym":"at that point",
        "desc":"At that point I didn't realize she was crying",
        "type":"10"
    },
    {
        "phrase":"then",
        "synonym":"at that point",
        "desc":"At that point I didn't realize she was crying",
        "type":"10"
    },
    {
        "phrase":"at some time",
        "synonym":"at some point",
        "desc":"Let's talk about it at some point",
        "type":"10"
    },
    {
        "phrase":"seldom",
        "synonym":"rarely",
        "desc":"用rarely更多",
        "type":"10"
    },
    {
        "phrase":"so far",
        "synonym":"thus far/up to date",
        "desc":"",
        "type":"10"
    },
    {
        "phrase":"in the future",
        "synonym":"down the road",
        "desc":"There will be a lot of challenges down the road",
        "type":"10"
    },
    {
        "phrase":"from now on",
        "synonym":"going/moving forward",
        "desc":"Going forward, we'll pay more attention to it",
        "type":"10"
    },
    {
        "phrase":"related to",
        "synonym":"pertaining to",
        "desc":"Anything pertaining to my project, please let me know",
        "type":"10"
    },
    {
        "phrase":"doing",
        "synonym":"in the middle of doing",
        "desc":"I'm in the middle of a meeting=I'm having a meeting, when my boss called",
        "type":"10"
    },
    {
        "phrase":"while",
        "synonym":"whereas",
        "desc":"You eat a huge plate of food for",
        "type":"10"
    },
    {
        "phrase":"make sense",
        "synonym":"add up",
        "desc":"make sense很普遍,add up意思相同",
        "type":"10"
    },
    {
        "phrase":"make progress",
        "synonym":"get traction",
        "desc":"We are getting traction on this issue",
        "type":"10"
    },
    {
        "phrase":"colleagues",
        "synonym":"coworker",
        "desc":"美国用coworker较多",
        "type":"10"
    },
    {
        "phrase":"in summary",
        "synonym":"in a nutshell",
        "desc":"",
        "type":"10"
    },
    {
        "phrase":"employees",
        "synonym":"workforce",
        "desc":"The office's entire workforce is devoted to a single project right now",
        "type":"10"
    },
    {
        "phrase":"go to",
        "synonym":"head to",
        "desc":"headed/heading 都行;head to 某个具体位置;head for 某个方向;I'm heading/headed to/for the bus station 都行",
        "type":"10"
    },
    {
        "phrase":"don't understand",
        "synonym":"over my head",
        "desc":"It's over my head",
        "type":"10"
    },
    {
        "phrase":"under",
        "synonym":"underneath",
        "desc":"underneath 比 under更常见",
        "type":"10"
    },
    {
        "phrase":"table",
        "synonym":"matrix",
        "desc":"电子表格中的table可以用matrix标识",
        "type":"10"
    },
    {
        "phrase":"Excel",
        "synonym":"spreadsheet",
        "desc":"excel中每张表叫spreadsheet",
        "type":"10"
    },
    {
        "phrase":"hope",
        "synonym":"promise",
        "desc":"I see no promise in this project",
        "type":"10"
    },
    {
        "phrase":"I think",
        "synonym":"I guess",
        "desc":"用I guess较多,委婉。I guess we need to go now",
        "type":"10"
    },
    {
        "phrase":"come up with",
        "synonym":"figure out",
        "desc":"figure out a solution",
        "type":"10"
    },
    {
        "phrase":"futhermore",
        "synonym":"on top of that",
        "desc":"We missed the bus, and on top of that it started raining",
        "type":"10"
    },
    {
        "phrase":"face",
        "synonym":"tackle",
        "desc":"We have a lot of issues to tackle",
        "type":"10"
    },
    {
        "phrase":"talk",
        "synonym":"speak",
        "desc":"用speak似乎比talk多,I spoke to Kevin in this morning and he agreed",
        "type":"10"
    },
    {
        "phrase":"method",
        "synonym":"approach",
        "desc":"This is the best approach to solve the problem",
        "type":"10"
    },
    {
        "phrase":"way",
        "synonym":"approach",
        "desc":"This is the best approach to solve the problem",
        "type":"10"
    },
    {
        "phrase":"go on",
        "synonym":"move on",
        "desc":"let's move on,表示上一件事结束了,准备继续下一个",
        "type":"10"
    },
    {
        "phrase":"appear like",
        "synonym":"come across like",
        "desc":"You always come across like a madman to people./She comes across like the Queen of the Nile to most people who meet her.",
        "type":"10"
    },
    {
        "phrase":"all people",
        "synonym":"across the board",
        "desc":"We got a pay increase across the board",
        "type":"10"
    },
    {
        "phrase":"That's all",
        "synonym":"All right",
        "desc":"打电话结束时说 All right",
        "type":"10"
    },
    {
        "phrase":"OK",
        "synonym":"sounds good",
        "desc":"能够用OK都可以用sounds good",
        "type":"10"
    },
    {
        "phrase":"if so",
        "synonym":"if that's the case",
        "desc":"",
        "type":"10"
    },
    {
        "phrase":"your decision",
        "synonym":"up to you/your call/at your discretion",
        "desc":"It's up to you./It's your call./It's at your discretion.",
        "type":"10"
    },
    {
        "phrase":"discuss with you",
        "synonym":"run by you/bounce off you",
        "desc":"I have an idea to run by you./I have an idea to bounce off you.",
        "type":"10"
    }
]

json [智利] - 示例de busca de placas

[智利] - 示例de busca de placas

plate-search.json
{
    "payload": {
        "provider": null,
        "vin": null,
        "plate": "HTKZ88",
        "assembly": "2016",
        "year": "2016",
        "engine": "1.2",
        "doors": "5",
        "make": {
            "id": "2079",
            "name": "PEUGEOT"
        },
        "model": {
            "id": "72161",
            "name": "208"
        },
        "version": null,
        "color": null,
        "fuel": null,
        "kind": null,
        "bodyType": {
            "id": "3",
            "name": "Hatchback"
        },
        "origin": {
            "id": "2",
            "name": "Importado"
        },
        "original": null
    },
    "status": true,
    "messages": [],
    "messagesLite": [],
    "meta": {
        "requestTime": 0.80060195922852,
        "memoryPeak": "2 mb",
        "memoryUsage": "1012.81 kb"
    }
}