2017-01-29 2 views
0

Kendo UI를 사용하여 달력 작업을 시작하려면 먼저 Salesforce 조직에서 일정을 가져 와서 일정에 표시하면됩니다. .Kendo-UI 스케줄러 'GetTimezoneOffset'오류

var data = '{!jsonString}'; 
     var scheduler = $('#scheduler').kendoScheduler({ 
     date: new Date(), 
     startTime: new Date(), 
     height: 700, 
     timezone: "Etc/UTC", 
     views: [ 
      {type: "week", selected: true}, 
      "week", 
      "month", 
      "agenda" 
     ], 
     dataSource: { 
      batch: true, 
      transport: { 
       read: function(e){ 
        console.log(data); 
        e.success(data); 
       }, 
       update: { 
        url: "http://demos.telerik.com/kendo-ui/service/tasks/update", 
        dataType: "jsonp" 
       }, 
       create: { 
        url: "http://demos.telerik.com/kendo-ui/service/tasks/create", 
        dataType: "jsonp" 
       }, 
       destroy: { 
        url: "http://demos.telerik.com/kendo-ui/service/tasks/destroy", 
        dataType: "jsonp" 
       }, 
       parameterMap: function(options, operation) { 
        if (operation !== "read" && options.models) { 
         return {models: kendo.stringify(options.models)}; 
        } 
       } 
      }, 
      schema: { 
       model: { 
        id: "OwnerId", 
        fields: { 
         taskId: { from: "TaskID" }, 
         title: { from: "Title", defaultValue: "No title", validation: { required: true } }, 
         start: { type: "date", from: "Start" }, 
         end: { type: "date", from: "EndTime" }, 
         startTimezone: { from: "StartTimezone" }, 
         endTimezone: { from: "EndTimezone" }, 
         description: { from: "Description" }, 
         recurrenceId: { from: "RecurrenceID" }, 
         recurrenceRule: { from: "RecurrenceRule" }, 
         recurrenceException: { from: "RecurrenceException" }, 
         ownerId: { from: "OwnerID", defaultValue: 1 }, 
         isAllDay: { type: "boolean", from: "IsAllDay" } 
        } 
       } 
      } 
     } 
         //}); 
    }); 

그리고 데이터 변수는 형식으로 JSON이다 : 그러나, 나는 정의되지 않은 오류의 특성 '에, getTimezoneOffset'을 읽을 수 없습니다 "에 의해 괴롭혀되고 있어요 도움을 찾고 있어요 내 JS이다

[ "제목": "모임", "작업 ID": "00U410000059ZjbEAE", "StartTimezone": "기타/UTC", "시작": "2017-01-26", "RecurrenceRule": null, "RecurrenceId" : null, "RecurrenceException": null, "OwnerId": "005410000020eLnAAI", "IsAllDay": false, "EndTimezone": "Etc/UTC", "End": "2017-01-26", "설명 ":"회의 "}, {"제목 ":"meeti"TaskId": "00U410000059ZjcEAE", "StartTimezone": "Etc/UTC", "시작": "2017-01-26", "RecurrenceRule": null, "RecurrenceId": null, "RecurrenceException ": null,"OwnerId ":"005410000020eU9AAI ", "IsAllDay ": false,"EndTimezone ":"Etc/UTC ","End ":"2017-01-26 ", "설명 ":"모임 " }, 등 ...}]

읽기 작업의 console.log (데이터)에 따릅니다. 이벤트 배열을 가져 오는 컨트롤러가 있고 그 배열 (JSON String, 데이터 액세스)을 JSON.serialize합니다.

시간대 오프셋과 관련된 문제점을 해결하지 못하고 모든 JSON 항목 데이터가 자습서 스키마의 입력란과 일치하지만 여전히 작동하지 않습니다 ... 캘린더에 모든 이벤트를 표시하기 만하면됩니다. 이 JSON을 읽기 조작으로 전달하여 열 때 현재 존재합니다. 어떤 도움이라도 대단히 감사하게 될 것입니다! 고맙습니다. 여기

내 컨트롤러 :

global with sharing class CalendarData { 

public List<Event> eventList{get;set;} 
public String jsonString{get;set;} 
public List<schedulerItem> correctedItems{get;set;} 

public CalendarData(){ 
    String eventQuery = 'SELECT ActivityDate,ActivityDateTime,CreatedById,Description,DurationInMinutes,EventSubtype,IsAllDayEvent,Location,OwnerId,EndDateTime,StartDateTime,Subject FROM Event'; 
    eventList = Database.query(eventQuery); 
    correctedItems = itemList(eventList); 
    system.debug(correctedItems); 
    jsonString = JSON.serialize(correctedItems); 
    jsonString = jsonString.replace('"EndTime"', '"End"'); 
} 

public List<schedulerItem> itemList(List<Event> events){ 
     Integer i = 0; 
     system.debug(events); 
     List<schedulerItem> kendoEvents = new List<schedulerItem>(); 
     schedulerItem item = new schedulerItem(); 
     for(i = 0; i < events.size(); i++){ 
      item.Description = events[i].Description; 
      Datetime dt = events[i].EndDateTime; 
      item.EndTime = dt.date(); 
      dt = events[i].StartDateTime; 
      item.Start = dt.date(); 
      item.EndTimezone = 'Etc/UTC'; 
    //public String id; 
      item.IsAllDay = events[i].IsAllDayEvent; 
      item.RecurrenceException = null; 
      item.RecurrenceId = null; 
      item.RecurrenceRule = null; 
      item.StartTimezone = 'Etc/UTC'; 
      item.Title = events[i].Subject; 
      item.TaskId = events[i].Id; 
      item.OwnerId = events[i].OwnerId; 
      system.debug(item); 
      kendoEvents.add(item); 

      item = new schedulerItem(); 
     } 
     return kendoEvents; 
    } 

public class schedulerItem{ 
    public String Description; 
    public Date EndTime; 
    public Date Start; 
    public String EndTimezone; 
    //public String id; 
    public Boolean IsAllDay; 
    public String RecurrenceException; 
    public String RecurrenceId; 
    public String RecurrenceRule; 
    public String StartTimezone; 
    public String Title; 
    public String TaskId; 
    public String OwnerId; 

} 
} 

내가 이벤트의 목록을 다음 스키마와 일치 데이터 이름으로 이벤트에 원래의 이벤트 목록에서 데이터를 결합하는 새로운 목록을 작성하는 사용자 정의 클래스를 사용 튜토리얼의 모델 이름. 또한 모든 "EndTime"을 "End"로 대체합니다.

내 이벤트 읽을 수있는 솔루션을 찾았 내 반환 JSON 배열이 다음 객체의 단지 배열로 다시 구문 분석 걸렸

var data = '{!jsonString}'; 
       var dataList = JSON.parse(data); 
       function getNewEvents() { 
        var eventList = []; 
        for(var i = 0; i < dataList.length; i++){ 
         //console.log("DataList Again: " + dataList[i]); 
         var kendoEvent = new kendo.data.SchedulerEvent({ 
          id: i, 
          taskId: dataList[i].TaskId, 
          title: dataList[i].Title, 
          start: new Date(dataList[i].Start), 
          end: new Date(dataList[i].End), 
          startTimezone: dataList[i].StartTimezone, 
          endTimezone: dataList[i].EndTimezone, 
          description: dataList[i].Description, 
          recurrenceId: dataList[i].RecurrenceId, 
          recurrenceRule: dataList[i].RecurrenceRule, 
          recurrenceException: dataList[i].RecurrenceException, 
          ownerId: dataList[i].OwnerId, 
          isAllDay: dataList[i].IsAllDay 
         }); 
         eventList.push(kendoEvent); 
        } 
        return eventList; 
       } 
       eventData = getNewEvents(); 

을 한 후 실제 kendo.data.SchedulerEvents의 새로운 배열을 생성 모든 필드를 정확한 이름으로 채운다. 그리고 대신 URL 및 데이터 형식의 데이터 소스에서 내 읽기 작업에, 내가 한 :

데이터 검도 스케줄러 이벤트 내 배열
read: function(e){ 
    e.success(data); 
} 

. 이제 내 일정은 내 조직의 모든 일정을 보여줍니다. 이제는 업데이트 작업, 파괴 작업 및 생성 작업을 수행해야합니다. 수락 된 답변의 의견에 제공된 링크를 통해 필자는 필요한 문서와 함께이 솔루션에 도달 할 수있었습니다.

내가 코멘트에 있지만 오류의 코드 하나에보고 한 모델의 잘못된 구성뿐만 아니라 잘못된 읽기 구성

입니다 들어오는 필드로 JSON에 없기 때문에이 문제에 대한 다른 이유가있을 수 있습니다

+0

가장 일반적인 이유에 대한 정확하지 않은 경우, 나는 확실하지 않다 읽고 사용하십시오 "getTimezoneOffset of null"오류가 잘못 전달/설정된 날짜 값입니다. –

답변

1

EndTime 대신 입니다.

변경 ENDTIME 일치 여기

{"Title":"meeting","IsAllDay":false,"EndTimezone":"Etc/UTC","End":"2017-01-26", "Description":"a meeting"} 

이 telerik에서이 기본 예제를 참조 필드 선언 자세한 내용은

fields: { 
          taskId: { from: "TaskID" }, 
          title: { from: "Title", defaultValue: "No title", validation: { required: true } }, 
          start: { type: "date", from: "Start" }, 
// problem was here there is no EndTime as mentioned in the given code sample above . 
// changed to End as it is in the incoming JSON 
          end: { type: "date", from: "End" }, 
          startTimezone: { from: "StartTimezone" }, 
          endTimezone: { from: "EndTimezone" }, 
          description: { from: "Description" }, 
          recurrenceId: { from: "RecurrenceID" }, 
          recurrenceRule: { from: "RecurrenceRule" }, 
          recurrenceException: { from: "RecurrenceException" }, 
          ownerId: { from: "OwnerID", defaultValue: 1 }, 
          isAllDay: { type: "boolean", from: "IsAllDay" } 
         } 

가되어 들어오는 JSON 필드의 선언 끝 에 웹 사이트.

http://demos.telerik.com/kendo-ui/scheduler/index

올바른 읽기 구성

이 컨트롤러가 정확한 데이터를 반환하고 귀하의 바인딩

read: { url: "demos.telerik.com/kendo-ui/service/tasks";, dataType: "jsonp" } 
+0

답장을 보내 주셔서 감사합니다! 하지만 EndTime을 End로 변경했지만 여전히 오류가 발생합니다. 내 읽기 작업이 맞습니까? 그것이 로컬 json 배열로 스케줄러를 성공적으로 채우는 방법입니까? 나는 무엇이 잘못되었는지 알 수 없다 : ( –

+0

read : { url : "https://demos.telerik.com/kendo-ui/service/tasks", 데이터 타입 : "jsonp" } –

+0

컨트롤러를 사용하고 있었지만, 원래 방금 게시 한 테스트 결과와 함께 작동하도록 만들었지 만, 사전 설정된 이벤트를 가져옵니다. 그런 결과를 얻은 후에는 읽기 작업을 변경하여 로컬 데이터로 일정을 채 웁니다. salesforce.com에서 검색 한 json 배열의 이벤트) –