{
    "definitions": {},
    "$schema": "http://json-schema.org/draft-07/schema#",
    "$id": "http://dynamicsmobile.com/schema/json/businessobject.json",
    "type": "object",
    "additionalProperties":false,
    "title": "Dynamics Mobile Business Object",
    "minProperties": 1,
    "maxProperties": 1,  
    "patternProperties":{
         "^[A-Za-z][A-Za-z0-9]*$":{
            "type":"object",            
            "required": ["name","label","pluralLabel","properties","pageSize"],
            "properties":{                
                "help":{"type":"string"},
                "tableName":{"type":"string"},
                "syncTag":{"type":"string"},                
                "name":{"type":"string"},
                "label":{"type":"string"},
                "pluralLabel":{"type":"string"},
                "searching":{"type":"boolean"},
                "pageSize":{"type":"number","minimum": 1,"maximum": 20000},
                "syncDirection":{"type":"string","enum":["pull","push","both"]},
                "expand":{
                    "type":"object",
                    "maxProperties": 20,
                    "minProperties": 1,                    
                    "patternProperties":{
                        "^[A-Za-z][A-Za-z0-9]*$": {
                            "type":"object",
                            "required":["entity","field"],
                            "additionalItems": false,                            
                            "properties":{
                                "entity":{"type":"string"},
                                "field":{"type":"string"}
                            }
                        }                        
                    }
                },
                "properties":{
                    "type":"object",
                    "minProperties":2,
                    "properties":{
                       "DMS_ROWID":{
                           "title": "Business Object Primary key - DMS_ROWID",
                           "type":"object",
                           "properties":{
                               "type":{"type":"string","enum":["Binary"]},
                               "isPK":{"type":"boolean","enum":[true]}
                           }
                       } 
                    },                                 
                    "patternProperties":{                                             
                        "^[A-Za-z_][A-Za-z0-9_]*$":{
                            "title": "business object property definition",
                            "type":"object",
                            "minProperties":1,
                            "additionalProperties": false,
                            "required":["type","label","uiType"],
                            
                            "properties":{      
                                "help":{"type":"string"},                          
                                "type":{"type":"string","enum": ["Binary","String","Int32","Int64","ref","DateTime","Boolean","Decimal","Bigint"]},
                                "length":{"type":"number","minimum":1,"maximum":5000},
                                "label":{"type":"string"},
                                "isIdentity":{"type":"boolean","enum": [false]},
                                "isPK":{"type":"boolean","enum":[false]},
                                "sorting":{"type":"boolean"},
                                "searching":{"type":"boolean"},
                                "uiType":{"type":"string","enum": ["Default","textarea","color","week","month","file","password","tel","date","datetime-local","time"]},
                                "ref":{"type":"string"},
                                "refDisplayField":{"type":"string"},
                                "refFilter":{"type":"string"},
                                "integrity":{"type":"string","enum":[false,"restrict", "cascade", "set null"]},
                                "regex":{"type":"string"},
                                "required":{"type":"boolean"},
                                "unique":{"type":"boolean"},
                                "syncTag":{"type":"string"}, 
                                "format": {"type": "string"},
                                "max": {"type": "number"},
                                "min": {"type": "number"},
                                "List":{"type":"array","items":{
                                    "type":"object",
                                    "additionalProperties": false,
                                    "required": ["Code","Label"],                                    
                                    "properties": {
                                        "Code":{"type":["string","number"]},
                                        "Label":{"type":"string"}
                                    }                           
                                }},
                                "isNavigatable":{"type":"boolean"}
                            },
                            "if": {
                                "properties" : {
                                  "type": {"enum": ["String"]}
                                }
                            },
                            "then": {
                                "required":["length"]
                              }                             

                    }
                }
                 },
                 "views":{
                     "type":"object",
                     "patternProperties":{
                        "^[A-Za-z][A-Za-z0-9]*$": {
                            "type":"object",
                            "additionalProperties": false,
                            "required":["properties"],
                            "properties": {
                                "layout":{
                                    "type":"string",
                                    "pattern": "columns-\\d+"
                                },                                                                
                                "properties":{
                                    "type":"array",
                                    "minItems":1,
                                    "items":{
                                        "type":"object",
                                        "additionalProperties": false,
                                        "required":["name"],
                                        "properties": {
                                            "name":{"type":"string"},
                                            "label":{"type":"string"},
                                            "type":{"type":"string"},
                                            "readonly":{"type":"boolean"},
                                            "format":{"type":"string"}                
                                        }
                                    }
                                }
                            }
                        }
                     }
                 }
         }
     }
    }
}