整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          一文看懂kettle作業和轉換常用控件

          今天主要介紹一下kettle的常用控件。


          一、kettle控件

          Kettle控件的特點:Kettle的控件分類比較細致,功能相對單一也很具體。使用起來很容易掌握。

          Kettle一般處理方法:正式由于Kettle控件的細化特點,所以往往需要組合起來使用。組合使用只是從點的角度看問題,還有就是從線的角度看問題。比如,目標表中的各個列其值可能由其他列的值計算得到,這就涉及到列的計算次序。合理選擇計算次序,可以降低計算復雜度和可讀性。

          修改kettle文件:修改之后要保存才能生效。

          因為我們用作業和轉換比較多,所以主要介紹這兩類的控件。


          二、作業中常用控件:

          1、通用——START:作業開始;

          2、通用——作業:指定某個作業循環執行;

          3、通用——轉換:指定某個轉換,加入到作業中來;

          4、通用——設置變量:設置變量,為了轉換或者作業中獲取變量;

          5、通用——成功:作業完成操作;

          6、通用——DUMMY:空操作,什么也不執行;

          7、郵件——發送郵件:給指定郵箱發送郵件,發件人的賬號需要開通第三方發送郵件的功能;

          8、文件管理——復制/移動結果文件:復制/移動文件;

          9、文件管理——創建一個目錄:創建指定的目錄;

          10、文件管理——刪除一個文件:刪除指定的一個文件;

          11、文件管理——復制文件:復制指定的文件;

          12、文件管理——刪除目錄:刪除指定的目錄;

          13、文件管理——刪除多個文件:通過正則表達式批量刪除文件;

          14、條件——檢查數據庫連接:檢查數據庫是否能夠連接通;

          15、條件——檢查表是否存在:檢查指定的表是否存在;

          16、文件傳輸——SFTP下載:可以通過SSH進行遠程下載文件;

          17、文件傳輸——SFTP上傳:可以通過SSH進行遠程上傳文件;

          18、文件傳輸——FTP刪除:可以遠程刪除指定的文件;


          三、轉換中常用控件:

          1、輸入——Excel輸入:從excel文件中讀取數據;

          2、輸入——文本文件輸入:從文本文件中讀取數據;

          3、輸入——生成隨機數:用來生成指定類型的隨機數;

          4、輸入——自定義數據常量:將值不變的變量存入到此處,方便管理;

          5、輸入——獲取系統信息:可以獲取系統信息(日期、命令行參數);

          6、輸入——表輸入:從數據庫表中讀取數據;

          7、輸出——Excle輸出:注意.xls格式輸出行數有限制,一般輸出.xlsx最好;

          8、輸出——插入/更新:根據指定的匹配字段,可以檢測是插入新數據,還是修改舊數據;

          9、輸出——文本文件輸出:將結果數據輸出到文本文件中去;

          10、輸出——表輸出:將結果數據輸出到某個數據庫的某個表中;

          11、轉換——增加常量:在原數據中將常量值增加新一列;

          12、轉換——排序記錄:對原數據按照某個字段進行排序;

          13、轉換——剪切字符串:對字符串進行截圖;

          14、轉換——去重復記錄:對于某個字段有重復的記錄進行過濾;

          15、轉換——字段選擇:篩選流中的字段,慎用,過濾后后面的控件將無法獲取流中篩除的字段了;

          16、流程——空操作:將不需要的數據放到此處,類似垃圾箱;

          17、流程——過濾記錄:按照條件進行過濾,類似if-else;

          18、流程——Switch/Case:與java中switch/case一樣;

          19、腳本——java代碼:執行java代碼;

          20、腳本——javascript代碼:執行javascript代碼;

          21、腳本——執行SQL腳本:執行sql;

          22、連接——記錄集連接:類似于sql的left join/right join/inner join,但是使用前的數據必須要經過排序;

          23、作業——從結果獲取記錄:從作業中獲取數據;

          24、作業——復制記錄到結果:將轉換中的結果數據放到作業中去;

          25、作業——獲取變量:從作業中獲取變量;

          26、作業——設置變量:設置變量,從而讓作業中能夠獲取變量;


          覺得有用的朋友多幫忙轉發哦!后面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注下~

          信公眾號:Dotnet9,網站:Dotnet9,問題或建議:請網站留言, 如果對您有所幫助:歡迎贊賞。

          快到2020年了,祝大家新年快樂,今年2019最后一更,謝謝大家支持!

          閱讀導航

          1. 本文背景
          2. 代碼實現
          3. 本文參考
          4. 源碼

          1. 本文背景

          一個系統主界面,放上一個菜單,點擊菜單在客戶區切換不同的展示界面,這是很常規的設計,見下面展示效果圖:



          左側一個菜單,點擊菜單,右側切換界面,界面切換動畫使用MD控件的組件實現(自己使用動畫也能實現)。

          2. 代碼實現

          使用 .NET CORE 3.1 創建名為 “MenuChange” 的WPF模板項目,添加1個Nuget庫:MaterialDesignThemes,版本為最新預覽版3.1.0-ci948。

          解決方案主要文件目錄組織結構:

          • AnimatedMenuApp.xamlMainWindow.xamlMainWindow.xaml.cs..[數個演示模塊用戶控件]

          2.1 引入樣式

          文件【App.xaml】,在 StartupUri 中設置啟動的視圖【MainWindow.xaml】,并在【Application.Resources】節點增加 MaterialDesignThemes庫的樣式文件:

          <Application.Resources>
              <ResourceDictionary>
                  <ResourceDictionary.MergedDictionaries>
                      <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
                      <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
                      <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.Blue.xaml" />
                      <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Indigo.xaml" />
                  </ResourceDictionary.MergedDictionaries>
              </ResourceDictionary>
          </Application.Resources>

          2.2 演示窗體

          文件【MainWindow.xaml】,布局代碼、動畫代碼都在此文件中,源碼如下:

          <Window x:Class="MenuChange.MainWindow"
                  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                  xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
                  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                  mc:Ignorable="d"
                  Height="600" Width="1024" WindowStartupLocation="CenterScreen" ResizeMode="NoResize" WindowStyle="None" >
              <Grid Background="#FFEEEEEE" MouseDown="Grid_MouseDown">
                  <StackPanel VerticalAlignment="Top">
                      <Grid Background="#FF0069C0" Height="10"/>
                      <Grid Margin="5">
                          <StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
                              <TextBlock Text="Dotnet9.com" VerticalAlignment="Center" FontSize="20" FontFamily="Champagne & Limousines" Margin="20 0"/>
                              <Button Width="30" Height="30" Background="{x:Null}" BorderBrush="{x:Null}" Padding="0" Foreground="Gray">
                                  <materialDesign:PackIcon Kind="Wechat"/>
                              </Button>
                              <Button Width="30" Height="30" Background="{x:Null}" BorderBrush="{x:Null}" Padding="0" Foreground="Gray">
                                  <materialDesign:PackIcon Kind="Qqchat"/>
                              </Button>
                              <Button Width="30" Height="30" Background="{x:Null}" BorderBrush="{x:Null}" Padding="0" Foreground="Gray">
                                  <materialDesign:PackIcon Kind="GithubBox"/>
                              </Button>
                          </StackPanel>
                          <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="10 0">
                              <Button Width="30" Height="30" Background="{x:Null}" BorderBrush="{x:Null}" Padding="0" Foreground="Gray">
                                  <materialDesign:PackIcon Kind="BellOutline"/>
                              </Button>
                              <Button Width="30" Height="30" Background="{x:Null}" BorderBrush="{x:Null}" Padding="0" Foreground="Gray" Margin="0 0 10 0">
                                  <materialDesign:PackIcon Kind="Settings"/>
                              </Button>
                              <Button x:Name="ButtonFechar" Width="30" Height="30" Background="{x:Null}" BorderBrush="{x:Null}" Padding="0" Foreground="Gray" Click="ButtonFechar_Click">
                                  <materialDesign:PackIcon Kind="Close"/>
                              </Button>
                          </StackPanel>
                      </Grid>
                  </StackPanel>
          
                  <Grid Margin="250 55 0 0">
                      <Grid x:Name="GridPrincipal" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                  </Grid>
          
                  <Grid Width="250" HorizontalAlignment="Left" Background="#FF222222">
                      <materialDesign:TransitioningContent x:Name="TrainsitionigContentSlide" OpeningEffect="{materialDesign:TransitionEffect SlideInFromLeft, Duration=0:0:0.2}">
                          <Grid x:Name="GridCursor" Margin="0 100 0 0" Background="#FF0069C0" Width="10" HorizontalAlignment="Left" Height="60" VerticalAlignment="Top"/>
                      </materialDesign:TransitioningContent>
                      <Image Source="https://img.dotnet9.com/logo-head.png" VerticalAlignment="Top"/>
                      <Image Source="https://img.dotnet9.com/logo-foot.png" VerticalAlignment="Bottom"/>
                      <ListView x:Name="ListViewMenu" Margin="0 100" Foreground="LightGray" FontFamily="Champagne & Limousines" FontSize="18" SelectionChanged="ListViewMenu_SelectionChanged" SelectedIndex="0">
                          <ListViewItem Height="60">
                              <StackPanel Orientation="Horizontal">
                                  <materialDesign:PackIcon Kind="Home" Width="30" Height="30" VerticalAlignment="Center" Margin="5"/>
                                  <TextBlock Text="首頁" FontSize="17" VerticalAlignment="Center" Margin="20 0"/>
                              </StackPanel>
                          </ListViewItem>
                          <ListViewItem Height="60">
                              <StackPanel Orientation="Horizontal">
                                  <materialDesign:PackIcon Kind="LanguageCsharp" Width="30" Height="30" VerticalAlignment="Center" Margin="5"/>
                                  <TextBlock Text="WPF" FontSize="17" VerticalAlignment="Center" Margin="20 0"/>
                              </StackPanel>
                          </ListViewItem>
                          <ListViewItem Height="60">
                              <StackPanel Orientation="Horizontal">
                                  <materialDesign:PackIcon Kind="LanguageCsharp" Width="30" Height="30" VerticalAlignment="Center" Margin="5"/>
                                  <TextBlock Text="Winform" FontSize="17" VerticalAlignment="Center" Margin="20 0"/>
                              </StackPanel>
                          </ListViewItem>
                          <ListViewItem Height="60">
                              <StackPanel Orientation="Horizontal">
                                  <materialDesign:PackIcon Kind="LanguageCsharp" Width="30" Height="30" VerticalAlignment="Center" Margin="5"/>
                                  <TextBlock Text="ASP.NET CORE" FontSize="17" VerticalAlignment="Center" Margin="20 0"/>
                              </StackPanel>
                          </ListViewItem>
                          <ListViewItem Height="60">
                              <StackPanel Orientation="Horizontal">
                                  <materialDesign:PackIcon Kind="LanguageCsharp" Width="30" Height="30" VerticalAlignment="Center" Margin="5"/>
                                  <TextBlock Text="Xamarin.Forms" FontSize="17" VerticalAlignment="Center" Margin="20 0"/>
                              </StackPanel>
                          </ListViewItem>
                          <ListViewItem Height="60">
                              <StackPanel Orientation="Horizontal">
                                  <materialDesign:PackIcon Kind="LanguageCpp" Width="30" Height="30" VerticalAlignment="Center" Margin="5"/>
                                  <TextBlock Text="C++" FontSize="17" VerticalAlignment="Center" Margin="20 0"/>
                              </StackPanel>
                          </ListViewItem>
                      </ListView>
                  </Grid>
          
              </Grid>
          </Window>

          簡單說明下:

          1. "GridPrincipal" 作為客戶區子模塊界面容器,展示新界面時,先移除舊用戶控件,再添加新用戶控件(站長以前使用時,是遍歷容器中所有用戶界面,對非選擇用戶控件作隱藏操作,然后添加新用戶控件或者對已存在的被選擇用戶控件作顯示操作)。
          2. 左側菜單項使用 "ListView" 進行布局,實際開發需要運用模板,使用MVVM做成動態菜單,方便擴展。
          3. 右側切換的子模塊界面應該使用Prism或者其他框架(自已實現的模塊dll)實現的子界面,方便動態擴展(需要和左側菜單項進行關聯)。

          文件【MainWindow.xaml.cs】,后臺關閉窗體、菜單點擊切換子模塊界面、窗體移動等事件處理:

          using System.Windows;
          using System.Windows.Controls;
          using System.Windows.Input;
          
          namespace MenuChange
          {
              /// <summary>
              /// Interaction logic for MainWindow.xaml
              /// </summary>
              public partial class MainWindow : Window
              {
                  public MainWindow()
                  {
                      InitializeComponent();
                  }
                  private void ButtonFechar_Click(object sender, RoutedEventArgs e)
                  {
                      Application.Current.Shutdown();
                  }
          
                  private void Grid_MouseDown(object sender, MouseButtonEventArgs e)
                  {
                      DragMove();
                  }
          
                  private void ListViewMenu_SelectionChanged(object sender, SelectionChangedEventArgs e)
                  {
                      int index = ListViewMenu.SelectedIndex;
                      MoveCursorMenu(index);
          
                      switch (index)
                      {
                          case 0:
                              GridPrincipal.Children.Clear();
                              GridPrincipal.Children.Add(new UserControlMain());
                              break;
                          case 1:
                              GridPrincipal.Children.Clear();
                              GridPrincipal.Children.Add(new UserControlWPF());
                              break;
                          case 2:
                              GridPrincipal.Children.Clear();
                              GridPrincipal.Children.Add(new UserControlWinform());
                              break;
                          case 3:
                              GridPrincipal.Children.Clear();
                              GridPrincipal.Children.Add(new UserControlASPNETCORE());
                              break;
                          case 4:
                              GridPrincipal.Children.Clear();
                              GridPrincipal.Children.Add(new UserControlXamarinForms());
                              break;
                          case 5:
                              GridPrincipal.Children.Clear();
                              GridPrincipal.Children.Add(new UserControlCPP());
                              break;
                          default:
                              break;
                      }
                  }
          
                  private void MoveCursorMenu(int index)
                  {
                      TrainsitionigContentSlide.OnApplyTemplate();
                      GridCursor.Margin = new Thickness(0, (100 + (60 * index)), 0, 0);
                  }
              }
          }

          方便演示,點擊菜單,切換子用戶控件時時寫死的,見上面的說明,左側菜單及右側切換的子用戶控件需要進行關聯配置,方便擴展,建議使用Prism的模塊化開發。

          2.3 演示主模塊

          文件【UserControlMain.xaml】,只展示其中一個子模塊用戶控件吧,其他類似,文末有源碼、可運行Demo供下載參考。

          注意: 需要使用MD控件的 TransitioningContent 組件將用戶控件可視區域包裹起來,用于使用MD的移動切換動畫,其中 OpeningEffect 見名思意,即是展示此用戶控件時,動畫如何播放,見下面代碼,SlideInFromLeft 是指示展示時由左向右緩動,相反 SlideInFromRight即是由右向左緩動,其他屬性可查閱MD官網或者Demo研究。

          <UserControl x:Class="MenuChange.UserControlMain"
                       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                       xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
                       xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                       xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                       mc:Ignorable="d"
                       Height="auto" Width="auto">
              <Grid>
                  <materialDesign:TransitioningContent x:Name="TrainsitionigContentSlide" OpeningEffect="{materialDesign:TransitionEffect SlideInFromLeft, Duration=0:0:0.8}">
                      <StackPanel Background="#33ff0000">
                          <TextBox HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30" Foreground="White" Text="https://dotnet9.com"/>
                          <Image Source="https://img.dotnet9.com/20200124165746.png"/>
                      </StackPanel>
                  </materialDesign:TransitioningContent>
              </Grid>
          </UserControl>

          已奉上關鍵代碼,全部代碼文末有下載鏈接...

          3.本文參考

          1. 視頻一:C# WPF Material Design UI: Fast Food Sales,配套源碼:Pizzaria1。
          2. C# WPF開源控件庫《MaterialDesignInXAML》

          4.源碼

          站長方便演示,文中的圖片使用的本站外鏈圖片:

          演示Demo下載


          除非注明,文章均由 Dotnet9 整理發布,歡迎轉載。

          轉載請注明本文地址:https://dotnet9.com/7743.html


          時間如流水,只能流去不流回!

          謂多行文本輸入控件,就是網頁表單中,因輸入內容較多需換行顯示的文本輸入控件,一般為textarea元素。很多富文本輸入框也是對textarea進行包裝。

          <textarea name="Content" rows="8" style="width: 380px"></textarea>

          多選文本輸入框


          自動填寫多行文本輸入控件的五種方法
          1、通過修改元素屬性填表
          textarea元素比較特殊,在html中直接指定value屬性值是無效的。修改textarea元素的text屬性,可以實現自動填表,但要求textarea元素未被腳本賦值的情況下text才有效。修改text屬性不會觸發元素綁定的事件,但在木頭瀏覽器填寫項目中,可以明確指定填表前和填表后需要觸發的事件。

          修改元素屬性


          2、由系統向瀏覽器發送數據
          在window系統下,這幾乎是一個萬能的方法,支持中文輸入,獲得控件元素后,填寫屬性設置為KeyboardSend。在自動輸入前,瀏覽器會自我激活為當前活動窗口,同時把輸入焦點轉移到設定的多行文本控件上。在輸入過程中,不能手工干預,不能讓控件失去焦點,也不能切換到別的程序窗口。輸入遠程會觸發控件綁定的事件代碼。

          系統向瀏覽器發送內容


          3、模擬人工鍵盤操作
          獲取元素后,把填寫屬性設置為Keyboard,能達到人工按下實體鍵盤一樣的效果,因此不能輸入中文,執行時同樣會自動激活瀏覽器窗體,輸入焦點轉移到多選文本控件上。輸入過程中會觸發元素綁定的相關事件。

          模擬人工按鍵


          4、模擬鍵盤事件
          在不按下鍵盤的情況下,直接產生按鍵事件作用于當前活動窗口,獲取元素后設置填寫屬性為KeyboardEvent。與模擬人工操作效果一樣,自動激活瀏覽器窗體,定位輸入焦點到多行文本控件上才能完成輸入,亦不支持中文輸入,會觸發元素控件綁定的腳本事件。

          發送鍵盤事件


          5、執行腳本代碼控制輸入
          在項目管理窗口中,創建一個腳本代碼的步驟,執行JavaScript代碼修改textarea的value屬性值。注意:textarea雖然在html中沒有value屬性,但在JavaScript代碼中是支持的。不管textarea是否被賦初值,都不影響腳本執行填表效果。

          document.getElementsByTagName("textarea")[0].value="木頭軟件";

          也可以使用JQuery代碼,只要勾選【引入JQuery】,瀏覽器自動引用JQuery庫
          $("textarea").eq(0).val("木頭軟件");

          腳本填表多行文本框


          執行以上腳本輸入內容后,不會觸發控件綁定的事件,如有必要,可以在代碼中主動調用相關的事件處理代碼。也可以再添加一個填表步驟項目來主動觸發事件代碼執行。


          上一篇:HTML 音頻(Audio)
          下一篇:前端之html_day01
          主站蜘蛛池模板: 亚洲一区二区三区不卡在线播放| 国产成人综合一区精品| 精品视频一区二区三区| 国产一区二区免费视频| 国产精品久久亚洲一区二区| 精品无码av一区二区三区| 国产一区二区三区在线观看影院| 麻豆aⅴ精品无码一区二区| 国产精品一区二区av| 久久人妻内射无码一区三区| 久久精品人妻一区二区三区| 在线观看视频一区二区| 在线精品国产一区二区| 国产一区二区免费| 国产成人精品无码一区二区| 一区二区精品久久| 天码av无码一区二区三区四区| 日本无码一区二区三区白峰美| 久久se精品一区二区国产| 国产在线观看一区精品| 国产亚洲一区区二区在线| 国产精品99无码一区二区| www一区二区www免费| 丰满人妻一区二区三区视频| 无码精品人妻一区二区三区影院| 国产精品一区二区综合| 波多野结衣在线观看一区二区三区| 无码人妻aⅴ一区二区三区有奶水| 2018高清国产一区二区三区| 中文字幕AV一区二区三区| 蜜桃无码AV一区二区| 亚洲一区二区三区免费在线观看| 亚洲一区二区久久| 亚洲日韩AV一区二区三区四区| 少妇一晚三次一区二区三区| 无码人妻aⅴ一区二区三区| 国产伦精品一区二区三区在线观看 | 国产乱码一区二区三区| 亚洲日韩国产一区二区三区在线 | 性无码免费一区二区三区在线| 在线精品亚洲一区二区三区|