今天主要介紹一下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最后一更,謝謝大家支持!
閱讀導航
一個系統主界面,放上一個菜單,點擊菜單在客戶區切換不同的展示界面,這是很常規的設計,見下面展示效果圖:
左側一個菜單,點擊菜單,右側切換界面,界面切換動畫使用MD控件的組件實現(自己使用動畫也能實現)。
使用 .NET CORE 3.1 創建名為 “MenuChange” 的WPF模板項目,添加1個Nuget庫:MaterialDesignThemes,版本為最新預覽版3.1.0-ci948。
解決方案主要文件目錄組織結構:
文件【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>
文件【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>
簡單說明下:
文件【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的模塊化開發。
文件【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>
站長方便演示,文中的圖片使用的本站外鏈圖片:
演示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("木頭軟件");
腳本填表多行文本框
執行以上腳本輸入內容后,不會觸發控件綁定的事件,如有必要,可以在代碼中主動調用相關的事件處理代碼。也可以再添加一個填表步驟項目來主動觸發事件代碼執行。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。