0

私はsharepoint 2010にあるアプリケーションを持っています。実際には、アプリケーションユーザーは複数の場所からそのアプリケーションで作業しています..そして、1人のユーザーがIST時間(UTC + 5:30)で15日間働いていて、次の10日間は米国に行く場合彼は CST または EST タイムゾーンで働いています...そのため、私のユーザーは自分の場所に応じてタイムゾーンを変更しています...しかし、今の問題は..彼がレポートを生成しようとすると..日時フィールドが正しく表示されないことです... . IST タイムゾーンが正しく選択されている場合、すべてのデータは IST タイムゾーンで表示されます... EST と CST は正しく表示されず、ユーザーは異なる - 2 つのタイムゾーン データを分離できません...

実際、私は asmx webservices によるレポートを提供しました..私が書いた以下のコードを見つけてください..

              using System;
          using System.Collections;
          using System.Text;
          using System.Data;
          using System.Data.SqlTypes;
          using Microsoft.SqlServer.Server;
          using System.Security.Principal;
          using System.Net;
          using System.Xml;


          public class SharePointActivities
          {
              [SqlFunction(SystemDataAccess = SystemDataAccessKind.Read, FillRowMethodName = "GetActivitiesItemInfo")]
            public static IEnumerable GetActivitiesItems(SqlString url, SqlString listName, SqlString viewName, SqlString Query)
              {
                  DataTable t = new DataTable();
                  WindowsImpersonationContext ctx = null;

                  WindowsIdentity id = SqlContext.WindowsIdentity;

                  try
                  {
                      ctx = id.Impersonate();

                      WSS.Lists svc = new WSS.Lists();
                      svc.Url = url.ToString();

                      //svc.Credentials = new NetworkCredential("krishna", "google@123", "WKS10953");
                      //Or
                      //svc.Credentials = new System.Net.NetworkCredential("krishna", "google@123", "WKS10953");
                      //Or
                      svc.Credentials = CredentialCache.DefaultNetworkCredentials;
                      //Or
                      //svc.UseDefaultCredentials = true;
                      //svc.PreAuthenticate = true;
                      //Or
                      //oServices.Credentials = new NetworkCredential("krishna", "google@123", "wks10953");

                      //Query
                      XmlDocument xmlDoc = new XmlDocument();
                      XmlNode query = xmlDoc.CreateElement("Query");
                      query.InnerXml = Query.ToString();//"<Where><Gt><FieldRef Name=\"ID\" /><Value Type=\"Counter\">3</Value></Gt></Where>";

                      //ViewFields
                      XmlElement viewFields = xmlDoc.CreateElement("ViewFields");
                      viewFields.InnerXml = "";// "<FieldRef Name=\"Title\" />";

                      //QueryOptions
                      XmlElement queryOptions = xmlDoc.CreateElement("QueryOptions");
                      queryOptions.InnerXml = "";

                      XmlNode node = svc.GetListItems(listName.ToString(), viewName.ToString(), query, viewFields, "500000", queryOptions, null);
                      XmlTextReader rdr = new XmlTextReader(node.OuterXml,
                                                  XmlNodeType.Element, null);
                      DataSet ds = new DataSet();
                      ds.ReadXml(rdr);
                      t = ds.Tables[1];
                  }
                  finally
                  {
                      if (ctx != null)
                          ctx.Undo();
                  }

                  return t.Rows;
              }

              public static void GetActivitiesItemInfo(
                                  object obj,
                                  out SqlString ID,
                                  out SqlString Title,
                                  out SqlString RecordDate,
                                  out SqlString ClientVertical,
                                  out SqlString Client,
                                  out SqlString StoreUnits,
                                  out SqlString Process,
                                  out SqlString MainActivity,
                                  out SqlString SubActivity,
                                  out SqlString PeriodStartDate,
                                  out SqlString PeriodEndDate,
                                  out SqlString NoOfPeriod,
                                  out SqlString EntryType,
                                  out SqlString StartTime,
                                  out SqlString StopTime,
                                  out SqlString TimeTaken,
                                  //out SqlString VolumeCount,
                                  //out SqlString InputMode,
                                  //out SqlString Category,
                                  out SqlString Remarks)
              {
                  DataRow r = (DataRow)obj;
                  ID = new SqlString(Convert.ToString(r["ows_ID"]));
                  Title = new SqlString(Convert.ToString(r["ows_Title"]));
                  RecordDate = new SqlString(Convert.ToString(r["ows_RecordDate"]));
                  ClientVertical = new SqlString(Convert.ToString(r["ows_ClientVertical"]));
                  Client = new SqlString(Convert.ToString(r["ows_Client"]));
                  StoreUnits = new SqlString(Convert.ToString(r["ows_StoreUnits"]));
                  Process = new SqlString(Convert.ToString(r["ows_Process"]));
                  MainActivity = new SqlString(Convert.ToString(r["ows_MainActivity"]));
                  SubActivity = new SqlString(Convert.ToString(r["ows_SubActivity"]));
                  PeriodStartDate = new SqlString(Convert.ToString(r["ows_PeriodStartDate"]));
                  PeriodEndDate = new SqlString(Convert.ToString(r["ows_PeriodEndDate"]));
                  NoOfPeriod = new SqlString(Convert.ToString(r["ows_NoOfPeriod"]));
                  EntryType = new SqlString(Convert.ToString(r["ows_EntryType"]));
                  StartTime = new SqlString(Convert.ToString(r["ows_StartTime"]));
                  StopTime = new SqlString(Convert.ToString(r["ows_StopTime"]));
                  TimeTaken = new SqlString(Convert.ToString(r["ows_TimeTaken"]));
                  //VolumeCount = new SqlString(Convert.ToString(r["ows_VolumeCount"]));
                  //InputMode = new SqlString(Convert.ToString(r["ows_InputMode"]));
                  //Category = new SqlString(Convert.ToString(r["ows_Category"]));
                  Remarks = new SqlString(Convert.ToString(r["ows_Remarks"]));
              }
          }

私のレポートのこのコードでは、Recorddateフィールドからパラメーターの開始日と終了日を取得します..しかし、ユーザーが現在のISTタイムゾーンを選択した場合..CSTとESTの記録されたデータは、機能しない1日前を示します..

レコードが作成されたタイムゾーンと、すべてのタイムゾーンで見つけるレコードデータの utc 値を知っているかもしれません...または実際の日付を見つけるための他の解決策..

4

0 に答える 0