You are retrieving events from a public feed (see your  
EVENT_FEED_URL). Public feeds don't have edit links for the events  
that they contain. That's why you are receiving the "entry has no edit  
link" error.

Ray
-- 
Ray Baxter
[EMAIL PROTECTED]

On Aug 22, 2008, at 5:24 AM, Bharathi wrote:

>
> What steps will reproduce the problem?
> 1. please access the web page "http://www.sahrudaya.com/DC.html";
>
> 2. I used javascript to communicate with my calendarservices.
> In my page I tried to list all my calendars and the respective events.
> Till that point it is working fine.
> I tried to do some changes to the existing event and save it to the
> calendar. But it is giving error as "entry has no edit link".
>
> Then I added an update event code in my program and I was able to
> update
> only my private events.
> // Create a CalendarEventQuery, and specify that this query is
> // applied toward the "private/full" feed
> Here the CalendarEventQuery is not allowing me to give "allcalendars/
> full"
> feed.
>
>
>
> What is the expected output? What do you see instead?
>
> Can any one help me to resolve this. I would like to save/modify
> events to
> my private as well as public and other calendars(who has given me
> permissions to update their events) programatically.
>
>
> Thank you,
>
> Bharathi
>
>
> My program goes like this:
>
> <html>
> <head>
> <script type="text/javascript"
>  src="http://www.google.com/jsapi?key=mykey";>
> </script>
>  <script type="text/javascript">
>
>
>
> var DEFAULT_PANE = "default-pane";
> var AUTHENTICATED_PANE = "authenticated-pane";
> var AUTH_BUTTON = "auth-button";
> var LOGOUT_BUTTON = "logout-button";
> var SAVE_BUTTON = "save-button";
> var CAL_SELECT = "cal-select";
> var EVENT_SELECT = "event-select";
> var TITLE_FIELD = "title-field";
> var TITLE_CHANGE="title-change";
> var DATE_FIELD = "date-field";
> var LOCATION_FIELD = "location-field";
> var ATTENDEES_FIELD = "attendees-field";
> var NOTES_FIELD = "notes-field";
> var STATUS_AREA = "status-area";
>
>
>
>
> var CAL_FEED_URL = "http://www.google.com/calendar/feeds/default/
> allcalendars/full";
> var myService;
> var EVENT_FEED_URL;
> var myEventsFeed;
> var myCalFeed;
>
> google.load("gdata", "1");
>
>
> function init()
> {
>  google.gdata.client.init(handleError);
>
>  var token = google.accounts.user.checkLogin(CAL_FEED_URL);
>
>  myService =
>      new google.gdata.calendar.CalendarService("GoogleInc-
> jsguide-1.0");
>
>  var authButton = document.getElementById(AUTH_BUTTON);
>
>  if (google.accounts.user.checkLogin(CAL_FEED_URL))
>         {
>               document.getElementById(DEFAULT_PANE).style.display = "none";
>               document.getElementById(AUTHENTICATED_PANE).style.display =
> "inline";
>               getCalendars();
>         }
>  else
>         {
>               document.getElementById(DEFAULT_PANE).style.display = "inline";
>               document.getElementById(AUTHENTICATED_PANE).style.display = 
> "none";
>         }
>
>  reset();
> };
>
>
> google.setOnLoadCallback(init);
>
>
> function login()
>       {
>         var token = google.accounts.user.login(CAL_FEED_URL);
>       };
>
> function logout()
>       {
>         google.accounts.user.logout();
>         init();
>       };
>
> function getCalendars()
>       {
>         myService.getAllCalendarsFeed(CAL_FEED_URL, handleCalendarFeeds,
> handleError);
>       };
>
> function handleCalendarFeeds(myCalFeedResults)
> {
>  var calList = document.getElementById(CAL_SELECT);
>  calList.onchange = loadCalEvent;
>  calList.disabled = false;
>  calList.options[calList.selectedIndex].disabled = true;
>  calList.options[calList.selectedIndex].text = "Select...";
>
>  myCalFeed = myCalFeedResults.feed;
>  events = myCalFeed.getEntries();
>
>    for (var i = 0; i < events.length; i++)
>               {
>               var option = document.createElement("option");
>               eventTitle = events[i].getTitle().getText();
>               option.value = i;
>               option.appendChild(document.createTextNode(eventTitle));
>               calList.appendChild(option);
>               }
> };
>
>
> function loadCalEvent()
> {
>       var calList = document.getElementById(CAL_SELECT);
>       var eventList = document.getElementById(EVENT_SELECT);
>       var calIndex = calList.options[calList.selectedIndex].value;
>       var entries = myCalFeed.getEntries();
>       var calendarEntry = myCalFeed.getEntries()[calIndex];
>       var calendarTitle = calendarEntry.getTitle().getText();
>       if (calendarEntry.getAuthors()[0].getEmail() !=null)
>       {
>               var calendarTitle1 = (calendarEntry.getAuthors().length > 0) ?
> calendarEntry.getAuthors()[0].getEmail().getValue(): undefined;
>               EVENT_FEED_URL = "http://www.google.com/calendar/feeds/"; +
> calendarTitle1 + "/public/full";
>       }
>       getEvents();
> };
>
>
> function getEvents()
> {
>  var query = new
> google.gdata.calendar.CalendarEventQuery(EVENT_FEED_URL);
>  alert(EVENT_FEED_URL);
>
>  // Set the start-min parameter to the beginning of today.
>  var todayDate = new Date();
>  todayDate.setHours(0);
>  todayDate.setMinutes(0);
>  todayDate.setSeconds(0);
>  todayDate.setMilliseconds(0);
>  var today = new google.gdata.DateTime(todayDate, false);
>  query.setMinimumStartTime(google.gdata.DateTime.toIso8601(today));
>
>  // Set the start-max parameter to the beginning of tomorrow.
>  var tomorrowDate = new Date();
>  tomorrowDate.setDate(todayDate.getDate() + 1);
>  tomorrowDate.setHours(0);
>  tomorrowDate.setMinutes(0);
>  tomorrowDate.setSeconds(0);
>  tomorrowDate.setMilliseconds(0);
>  var tomorrow = new google.gdata.DateTime(tomorrowDate, false);
>
> query.setMaximumStartTime(google.gdata.DateTime.toIso8601(tomorrow));
>
>  myService.getEventsFeed(query, handleEventsFeed, handleError);
> }
>
>
>  function handleEventsFeed(myResultsFeedRoot1)
>  {
>         var eventList = document.getElementById(EVENT_SELECT);
>         eventList.onchange = loadEvent;
>         eventList.disabled = false;
>         eventList.options[eventList.selectedIndex].disabled = true;
>         eventList.options[eventList.selectedIndex].text = "Select...";
>         eventList.options.length = 1;
>
>
>         myEventsFeed = myResultsFeedRoot1.feed;
>         events = myEventsFeed.getEntries();
>
>         for (var i = 0; i < events.length; i++)
>         {
>           var option = document.createElement("option");
>           eventTitle = events[i].getTitle().getText();
>               option.value = i;
>           option.appendChild(document.createTextNode(eventTitle));
>           eventList.appendChild(option);
>         }
> };
>
>
> function loadEvent()
> {
>  setStatus();
>  var saveButton = document.getElementById(SAVE_BUTTON);
>  saveButton.disabled = false;
>  var eventList = document.getElementById(EVENT_SELECT);
>
>  // If the first option (Select...) is selected, dont do anything
>  if (eventList.selectedIndex == 0) { return; }
>
>  var eventIndex = eventList.options[eventList.selectedIndex].value;
>  var event = myEventsFeed.getEntries()[eventIndex];
>
>  var title = document.getElementById(TITLE_FIELD);
>  title.value = event.getTitle().getText();
>
>  var date = document.getElementById(DATE_FIELD);
>  date.value = event.getTimes()[0].getStartTime().getDate();
>
>  var theLocation = document.getElementById(LOCATION_FIELD);
>  theLocation.value = event.getLocations()[0].getValueString();
>
>  if (theLocation.value == "undefined") {  theLocation.value = ""; }
>
>  var attendeesDiv = document.getElementById(ATTENDEES_FIELD);
>  attendeesDiv.innerHTML = "";
>
>  var participants = event.getParticipants();
>  for (var i = 0; i < participants.length; i++)
>         {
>               var element = document.createElement("div");
>               element.innerHTML = participants[i].getEmail();
>               attendeesDiv.appendChild(element);
>         }
>
>  var notes = document.getElementById(NOTES_FIELD);
>  notes.value = event.getContent().getText();
>  if (notes.value == "undefined") { notes.value = "";  }
> };
>
>
> /*
> * Update an event
> */
>
>
> function update_Event()
> {
>
> var searchText= document.getElementById(TITLE_FIELD).value;
>
>
> // Create a CalendarEventQuery, and specify that this query is
> // applied toward the "private/full" feed
>
> var Cal="http://www.google.com/calendar/feeds/default/private/full";;
> var token = google.accounts.user.login(Cal);
> var query = new google.gdata.calendar.CalendarEventQuery(Cal);
>
> alert('Calendar URL is:'+Cal);
>
> // Set the query with the query text
> query.setFullTextQuery(searchText);
>
> // Flag to indicate whether a match is found
> var eventFound = false;
>
> // The first matched event entry will have its title updated to this
> string
>
> var newTitle= document.getElementById(TITLE_CHANGE).value;
>
>
> // This callback method that will be called when getEventsFeed()
> returns feed data
> var callback = function(result) {
>
> // Obtain the array of matched CalendarEventEntry
>
> var entries = result.feed.entry;
>
> // If there is matches for the full text query
> alert('The length'+ entries.length);
>
>  if (entries.length > 0)
>                 {
>                       // update the first matched event title
>
>                       var event = entries[0];
>
>                       alert(event.getHtmlLink().getHref());
>                       alert('Edit Link is:'+ event.getEditLink().getHref());
>
>                       event.setTitle(google.gdata.Text.create(newTitle));
>
>                       event.updateEntry(
>                       function(result) {
>                       alert('event updated');
>                       },handleError
>                       );
>
>                 }
>  else
>                 {
>                       // No match is found for the full text query
>                       alert('Cannot find event(s) with text: ' + searchText);
>                 }
> }
>
> // Error handler to be invoked when getEventsFeed() or updateEntry()
> // produces an error
>
> var handleError = function(error) {
>  alert('handleerror'+error);
> }
>
> // Submit the request using the calendar service object
> myService.getEventsFeed(query, callback, handleError);
>
> };
>
>
>
> function saveEvent() {
>
>  var eventList = document.getElementById(EVENT_SELECT);
>  var eventIndex = eventList.options[eventList.selectedIndex].value;
>  var event = myEventsFeed.getEntries()[eventIndex];
>  var title = document.getElementById(TITLE_FIELD).value;
>
>  var date = new Date(document.getElementById(DATE_FIELD).value);
>  event.setTimes(null);
>  var when = new google.gdata.When();
>  when.setStartTime(date);
>  when.setEndTime(date);
>  event.addTime(when);
>  var theLocation = document.getElementById(LOCATION_FIELD).value;
>  event.getLocations()[0].setValueString(theLocation);
>  var notes = document.getElementById(NOTES_FIELD).value;
>  event.getContent().setText(notes);
>  alert(event.getContent().getText(notes));
>
>   alert(event.getHtmlLink().getHref());
>
>  event.updateEntry(handleSaveSuccess, handleSaveError);
> };
>
>
> function handleSaveSuccess(entryRoot) {
>
> alert(entryRoot.entry.getTitle().getText());
> var eventList = document.getElementById(EVENT_SELECT);
>  var option = eventList.options[eventList.selectedIndex]
>  option.text = entryRoot.entry.getTitle().getText();
>  var eventIndex = option.value;
>  alert(eventIndex);
>  myEventsFeed.getEntries()[eventIndex] = entryRoot.entry;
>  setStatus("Saved")
> };
>
>
> function setStatus(msg) {
>  var eventStatus = document.getElementById(STATUS_AREA);
>  if (msg) {
>    eventStatus.innerHTML = msg;
>  } else {
>    eventStatus.innerHTML = "";
>  }
> };
>
>
> function handleSaveError(e) {
>  setStatus(e.message);
>  handleError(e);
> };
>
>
> function handleError(e) {
>  if (e instanceof Error)
>         {
>               // Alert with the error line number, file and message.
>               alert('Error at line ' + e.lineNumber +
>                       ' in ' + e.fileName + '\n' +
>                       'Message: ' + e.message);
>               // If available, output HTTP error code and status text
>               if (e.cause)
>                       {
>                         var errorStatus = e.cause.status;
>                         var statusText = e.cause.statusText;
>                         alert('Root cause: HTTP error ' + errorStatus + ' 
> with status
> text of: ' +
>                                 statusText);
>                       }
>         }
>
>  else
>         {
>               alert(e.toString());
>         }
> };
>
> function reset() {
>  var saveButton = document.getElementById(SAVE_BUTTON);
>  saveButton.disabled = true;
>
>  var eventList = document.getElementById(EVENT_SELECT);
>  eventList.options[0].disabled = false;
>  eventList.options[0].text = "Waiting...";
>  while (eventList.length > 1) {
>     eventList.remove(1);
>  }
>  eventList.disabled = true;
>
>  document.getElementById(TITLE_FIELD).value = "";
>  document.getElementById(DATE_FIELD).value = "";
>  document.getElementById(LOCATION_FIELD).value = "";
>  var attendeesDiv = document.getElementById(ATTENDEES_FIELD);
>  attendeesDiv.innerHTML = "";
>  document.getElementById(NOTES_FIELD).value = "";
> };
>
>
> </script>
> </head>
> <body>
>    <table class="plain">
>
>      <tr>
>       <td class="plain" style="width:460px;">
>          <table class="plain">
>            <tr id="default-pane" style="display:none">
>              <td class="plain" style="height:404px; width:460px;
> background-color: rgb(158,200,255); text-align:center; vertical-
> align:middle">
>                <input id="auth-button" type="button" value="Login"
> onclick="login()" style="margin:5px 0px 5px 0px;"/>
>              </td>
>            </div>
>            <tr id="authenticated-pane" style="display:none">
>              <td class="plain" style="height:auto;background-color:
> rgb(158,200,255);text-align:center;">
>                <div id="dropdown">
>                  List of Domain Calendars:
>                  <select id="cal-select" style="width:120px"
> disabled="disabled">
>                    <option>Waiting...</option>
>                  </select>
>                </div>
>                                <div id="EventsDropDown">
>                                       List of Selected Calendar Events:
>                                       <select id="event-select" 
> style="width:120px"
> disabled="disabled">
>                    <option>Waiting...</option>
>                  </select>
>                </div>
>                <div id="event-table">
>                  <table class="plain" style="background-color:
> rgb(195, 217, 255);margin: 5px 10px 0px 10px;padding: 5px 5px 5px
> 5px">
>                    <tr>
>                      <td class="plain eventinfo">Title:</td>
>                      <td class="plain eventinfo"><input id="title-
> field" type="text" style="width:100%" onclick="setStatus();"/></td>
>                    </tr>
>                    <tr>
>                      <td class="plain eventinfo">Date:</td>
>                      <td class="plain eventinfo"><input id="date-
> field" type="text" style="width:100%" onclick="setStatus();"/></td>
>                    </tr>
>                    <tr>
>                      <td class="plain eventinfo">Location:</td>
>                      <td class="plain eventinfo"><input id="location-
> field" type="text" style="width:100%" onclick="setStatus();"/></td>
>                    </tr>
>                    <tr>
>                      <td class="plain eventinfo">Attendees:</td>
>                      <td class="plain eventinfo"><div id="attendees-
> field"></div></td>
>                    </tr>
>                    <tr>
>                      <td class="plain eventinfo" style="vertical-
> align:top">Notes:</td>
>                      <td class="plain eventinfo"><textarea id="notes-
> field" cols="40" rows="10" onclick="setStatus();"></textarea></td>
>                    </tr>
>
>                    <tr>
>                                         <td class="plain eventinfo">Change 
> Title to:</td>
>                                         <td class="plain eventinfo"><input 
> id="title-change"
> type="text" style="width:100%" onclick="setStatus();"/></td>
>                    </tr>
>
>
>                  </table>
>                  <input id="logout-button" type="button"
> value="Logout" onclick="logout()" style="float:left; margin:5px 0px
> 5px 0px;"/>
>                  <input id="save-button" type="button" value="Save to
> Google Calendar" onclick="saveEvent()" style="float:left; margin:5px
> 0px 5px 0px;"/>
>
>                  <input id="update-button" type="button"
> value="Update to Google Calendar" onclick="update_Event()"
> style="float:left; margin:15px 0px 15px 0px;"/>
>
>
>                  <div id="status-area" style="float:right; margin:5px
> 0px 5px 0px;"></div>
>                </div>
>              </td>
>            </tr>
>
>          </table>
>        </td>
>      </tr>
>          </table>
>    <img src="images/Logo_25wht.gif" />
>  </body>
> </html>
>
> </html>
>
>
> 

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google Calendar Data API" group.
To post to this group, send email to 
[email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-calendar-help-dataapi?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to