2013-07-03 8 views
1

저는 infopath 양식을 처음 사용합니다.Infoopath Formule for Weekdate

시작 날짜 아래에 내가 형태로

아래 내 열 같은 InfoPath 양식을 만들었습니다 있습니다

마다 발생합니다 아래로 주 * 텍스트 상자 * 드롭 (월, thue, --- 일)

기한 :

그는 3 제공하고 드롭 다운에서 그는 Thuesday을 선택하면 사용자가 텍스트 상자에 2013년 7월 2일로 시작 날짜를 선택 이제

.

이제 만기일에는 다음 주 목요일 날짜 즉 (2013년 7월 9일)을 표시해야한다. 개월

마찬가지로

. 당신은 InfoPath 양식에 fromule

내 양식의 URL (http://i.stack.imgur.com/PJAze.png)

감사와 모래를 좀 도와 주시겠습니까


데이브, 내 웹 방법은 내가 매개 변수를 할당에 붙어있어 다음과 같습니다 정보 경로 양식에 매개 변수 (EnteredDate, Number, DayofWeek)를 할당하는 방법을 알지 못합니다. 그게 도움이된다면 도움이 될 것입니다.

[WebMethod] 

    public String GetNthWeekdayOfMonth(DateTime EnteredDate, int Number, DayOfWeek weekday) 
    { 
     String error = ""; 

     var days = Enumerable.Range(1, DateTime.DaysInMonth(EnteredDate.Year, EnteredDate.Month)).Select(day => new DateTime(EnteredDate.Year, EnteredDate.Month, day)); 

     var weekdays = from day in days 
         where day.DayOfWeek == weekday 
         orderby day.Day ascending 
         select day; 

     int index = Number - 1; 

     if (index >= 0 && index < weekdays.Count()) 
      return Convert.ToString(weekdays.ElementAt(index)); 

     else 

      error = "The specified day does not exist in this "; 

     return error; 
    } 
+0

음 ... 당신은 분명히 모든 셋째 화요일을 선택하는 경우가 훨씬 나중에 2013년 7월 9일 있다는 것입니까? 그들은 실제로 3을 타이핑하고 있습니까? 아니면 1, 2, 3 등을 선택하기 위해 드롭 다운 상자를 얻나요? –

+0

그들은 dopdown.Attached에서 가져 오는 것입니다 이미지의 URL입니다. http://i.stack.imgur.com/PJAze.png) – sandy143

답변

0

나는 당신이 실제로 심지어 사소한없는 경우에도 코드와 함께 고급의 InfoPath 사용자에 대한 매우 어려울 것이다 달성하고 싶은 생각합니다.

당신은 몇 가지 옵션이 있습니다

  1. 누군가가 당신을 위해 매우 복잡한 XPath를 작성 오랜 시간을 보낸다. 당신은 그것이 어떻게 작동하는지 그리고 당신이 붙잡혀 야 할 어떤 것을 바꿀 필요가 있다면 정말로 이해하지 못합니다.

  2. 누군가가 당신이 아직도 이해가 안하지만 배우고 나중에 변경하는 것이 쉬울 것 더 읽을 수있는 코드를 작성 적은 시간을 보낸다.

  3. 당신은 몇 가지 코드 또는 XPath를 배우고 더 많은 이해를 할 때 나중에 다시 문제에 온다.

  4. 당신은이 기능에 대한 필요성을 다시 평가하고 거세한 숫양을 결정 여부 정말 가치 또는 대체하거나 달성하기 위해 더 나은 방법이 있는지. 답변에 관해서는 이제

:

당신이 그것을 양식의 필드에 영향을 뒤에 코드를 추가 할 수 있습니다 알고 코드를 어떤 친숙 함이있는 경우

. 내가 너라면 나도 지금이 시나리오에서 필요한만큼 많은 것을 배우고 나중에 개선하기를 계속할 것이다.

다음과 같이 할 수있는 :

  1. Tools > Form Options > Programming > Choose "C#" from drop down

  2. 모든 3 개 개의 입력 (startDate를,의 dayOfWeek, 및 n 번째 값)의 변경된 이벤트에 뒤에 코드를 후크 뒤에 코드를 추가합니다. Right Click > Programming > Changed Event

각 블록은 동일한 코드를 호출 할 수 있습니다. 예 :

public void StartDate_Changed(object sender, XmlEventArgs e) 
{ 
    ChangeDueDate(); 
} 

은하고있을 것 ChangeDueDate 코드는 다음과 같습니다

private void ChangeDueDate() 
{ 
    DateTime StartDate = MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:StartDate", NamespaceManager).ValueAsDateTime; 
    int DayOfWeek = MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:DayOfWeek", NamespaceManager).ValueAsInt; 
    int n = MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:n", NamespaceManager).ValueAsInt; 

    // If StarDate.DayOfWeek is not the same as DayOfWeek 
    // then add the amount of days necessary. 
    StartDate = StartDate.AddDays((7 - (int)StartDate.DayOfWeek + DayOfWeek) % 7); 
    // Add weeks until you reach the nth value. 
    while (((StartDate.Day - 1)/7) != n - 1) 
     StartDate = StartDate.AddDays(7); 
    // Finally set the DueDate field to the calculated date. 
    MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:DueDate", NamespaceManager).InnerXml = StartDate.ToString("dddd dd MMMM yyyy"); 
} 

내가 이것을 테스트 한 잘 작동하는 것 같다. 그러나 한 달에 매일 실제로 4 ~ 5 개가 있는지를 알 수있는 방법이 없다는 문제가 여전히 있습니다.

어쨌든 위를 시도하고 당신은 여전히 ​​몇 가지 더 질문을 도움이 필요하면 거기에서 이동합니다.

+0

안녕 데이브, 감사합니다 당신의 설명과 나는 정말 Listinfopath이며, 당신이 말한대로 할 매우 어려운 내 시나리오에 서길에 당신의 도움을 주셔서 감사합니다 infopath 형태로 계산. 그래서 webservice로 귀하의 방법을 사용하고 그것에서 값을 가져 오려고. 도와 주셔서 감사합니다. 언제나처럼 당신은 굉장합니다. – sandy143